1. 程式人生 > >Java基礎知識_畢向東_Java基礎視頻教程筆記(5-10)

Java基礎知識_畢向東_Java基礎視頻教程筆記(5-10)

efi color 逗號 ret 語句 簡單的 靜態成員 throws 解決

06天-05-面向對象(幫助文檔的制作javadoc):
java文檔生成命令:
javadoc -d filepatn demo.java -author -version(可選)
一個類中默認會有一個空參數的構造函數,這個默認的構造函數的權限和所屬類一致
默認構造函數的權限是隨著的類的變化而變化的。

06天-06-面向對象(靜態代碼塊):
靜態代碼塊的特點:隨著類的加載而加載,只執行一次,用於給類的初始化。
非靜態代碼塊的特點:隨著類的實例建立而分配內存空間初始化。
構造代碼塊的特點:隨著類的實例而初始化,在非靜態代碼塊初始化後。
new對象過程:
1.加載類文件到內存; 2.初始化類的靜態變量和函數; 3.分配堆內存地址;
4.在堆內存建立對象的特有屬性,並進行默認初始化; 5.對屬性顯示初始化
6.對對象構造代碼塊初始化;7.對對象對應的構造函數初始化;
8.將堆內存地址賦給棧內存對象的實例變量。

06天-09-面向對象(單例設計模式):
設計模式:解決某一類問題最行之有效的方法

07天-01-面向對象(繼承-概述):
繼承 extends:1.提高了代碼的復用性
2.讓類與類之間產生了關系,有了這個關系才有多態的特性
重載:只看同名函數的參數列表
重寫:子父類方法要一模一樣
繼承:子類的所有構造函數,默認都會訪問父類中的空參數構造函數
子類實例化過程:
子類每個構造函數的第一行都有一句隱式super();
當父類沒有空參數構造函數時,子類必須手動通過super語句指定訪問父類構造函數
當子類的構造函數第一行也可以指定this語句訪問本類構造函數間接訪問父類構造函數

07天-07-面向對象(final關鍵字):
final

:最終,作為一個修飾符
1.可以修飾類、函數、變量
2.被final修飾的類不可以被繼承,為了避免被繼承,被子類覆寫功能
3.被final修飾的方法不可以被覆寫
4.被final修飾的變量是一個常量只能賦值一次,可以是成員變量或者局部變量
5.內部類定義在類中的局部位置上時,只能訪問該局部被final修飾的局部變量

抽象類的特點:
1.抽象方法一定在抽象類中
2.抽象方法和抽象類都必須被abstract關鍵字修飾
3.抽象類不可以用new創建對象,因為調用抽象方法沒意義
4.抽象類中的方法要被使用,必須由子類覆寫所有抽象方法,建立子類對象調用
5.抽象類比一般類多了抽象函數,並且不可以實例化

模板方法設計模式:
在定義功能時,功能的一部分是確定,但是有一部分是不確定,而確定的部分在
使用不確定的部分,那麽就將不確定的部分暴露出去,由該類的子類實現

07天-12-面向對象(接口):
接口定義時特點:
1.接口中常見定義:常量、抽象方法
2.接口中的成員都有固定修飾符,可以省略
常量:public static final 方法:public abstract

接口:是不可以創建對象的,因為有抽象方法,需要被子類實現,子類對接口中
的抽象方法全部覆蓋後,子類才可以實例化,否則子類是一個抽象類
接口可以被類多實現,也是對類多繼承不支持的轉換形式
類與類:繼承關系,單繼承
接口與接口:繼承關系,多繼承
類與接口:實現關系,多實現

08天-01-面向對象(多態-概念):
多態:可以理解為事物存在的多種體現形態
多態的體現:父類的引用可以指向子類的對象,父類的引用可以接收自己子類對象
多態的前提:必須是類與類之間有關系,要麽是繼承,要麽是實現,並存在覆蓋
多態的好處:多態的出現大大提高了程序的擴展性
多態的弊端:提高了擴展性,但是只能使用父類的引用訪問父類中的成員

09天-01-面向對象(內部類訪問規則):
內部類的訪問規則:
1.內部類可以直接訪問外部類中的成員,包括私有。
之所以可以直接訪問外部類中的成員,是因為內部類中持有一個外部類的引用:
格式特點:外部類名.this.變量名
2.外部類要訪問內部類,必須建立內部類對象
3.當內部類中定義了靜態成員,該內部類必須是static
當內部類在成員位置時:
內部類訪問權限可以是private,但是外部類必須是default或者public
內部類訪問修飾符可以是static,並具備static的特性
訪問內部類:
當內部類定義在外部類的成員位置上,而且非私有,可以在外部其他類中訪問
當外部類中的靜態方法訪問內部類時,內部類也必須時static的
格式: 外部類名.內部類名 變量名=外部類對象.內部類對象
在外部其他類中,直接訪問static內部類的非靜態成員
格式: new 外部類名.內部類().非靜態成員;
在外部其他類中,直接訪問static內部類的靜態成員
格式: 外部類.內部類.靜態成員;
內部類定義在局部時:
1.不可以被成員修飾符修飾
2.可以直接訪問外部類中的成員,因為還持有外部類的引用
但是不可訪問它所在的局部變量,只能訪問被final修飾的局部變量

09天-04-面向對象(匿名內部類):
1.匿名內部類其實就是內部類的簡寫格式
2.定義匿名內部類的前提:內部類必須是繼承一個類或者實現接口
3.匿名內部類的格式: new 父類或者接口(){定義子類的內容};
4.其實匿名內部類就是一個匿名子類對象
5.匿名內部類中定義的方法最好不要超過3個

09天-05-面向對象(異常)
異常:就是程序在運行時出現不正常情況
異常由來:問題也是現實生活中一個具體的事物,也可以通過java類的形式
進行描述,並封裝成對象。其實是java對不正常情況進行描述後對象的體現
對於問題的劃分:兩種:
一種是嚴重問題,java通過error類進行描述,一般不編寫針對性代碼處理
一種是非嚴重問題,java通過exception類進行描述,使用針對性代碼處理
自定義異常:自定義類必須是繼承Exception類
繼承Exception原因:
異常體系有一個特點,因為異常類和異常對象都被拋出,他們都具備可拋性
這個可拋性是Throwable這個體系中獨有的特點。只有這個體系中的類和對象
才可以被throw和throws操作。

在函數上通過throws關鍵字聲明該函數有可能會出現異常,在被調用的地方
try-catch處理或者繼續拋出去
method thorws ArithmeticException,ArrayIndexOutofBoundsException

當函數內部出現throw拋出異常,那麽必須要給對應的處理動作
1.要麽在函數內部try-catc處理
2.要麽在函數上聲明拋給調用者處理

throw和throws的區別:
throw:使用在函數內,後面跟的是異常對象
throws:使用在函數上,後面跟的異常類,可以跟多個,用逗號隔開

Exception中有一個RuntimeException運行時異常,其子類有如下特點:
如果在函數內拋出該異常,函數上可以不用聲明,編譯通過
如果在函數上聲明了該異常,調用者可以不用進行處理
原因:該類異常是因為不需要讓調用者處理。當異常發生時,希望程序停止,
因為在運行時出現了無法繼續運行的情況,停止程序對代碼進行修正
自定異常時:如果該異常的發生,無法再繼續進行運算,
就讓自定義異常繼承RuntimeException類

對於異常分為兩類:
1.編譯時被檢測的異常
2.編譯時不被檢測的異常(運行時異常,RuntimeException以及其子類)

finally 裏面的語句無論是否有異常都會執行,在return前執行除了System.exit(0);

異常在子父類覆蓋中的體現:
1.子類在覆蓋父類時,如果父類的方法拋出異常,那麽子類的覆蓋方法,
只能拋出父類的異常或者該異常的子類
2.如果父類方法拋出多個異常,那麽子類在覆蓋該方法時,只能拋出父類異常的子集
3.如果父類或者接口的方法中沒有異常拋出,那麽子類在覆蓋方法時,也不
能拋異常。如果子類方法發生了異常,必須進行try-catch處理,不能拋出

異常總結:異常是對問題的描述,將問題進行對象的封裝。
異常體系:  Throwable
      --Error
      --Exception --RuntimeException
異常體系的特點:異常體系中的所有類以及建立的對象都具備可拋性,
也就是說可以被throw和throws關鍵字操作,也只有異常體系具備這個特點。
throw和throws的用法:
throw定義在函數內,用於拋出異常對象;
throws定義在函數上,用於拋出異常類,可以拋出多個用逗號隔開
註:當函數內容有throw拋出異常對象,並未進行try處理,必須要在函數
上聲明,否則編譯失敗。RuntimeException除外,可以不用throws或者try。
如果函數聲明了異常,調用者需要進行處理,可以throws或者try
異常有兩種:
編譯時被檢測的異常
該異常被標識,代表這類異常可以被處理。
在編譯時,如果沒有處理(沒有拋也沒有try),編譯失敗。
運行時異常(編譯時不檢測):
該異常的發生,建議不處理,讓程序停止,需要對代碼進行修正
在編譯時,不需要處理,編譯器不檢查
註意:finally中定義的通常是關閉資源,除了System.exit(0);其他情況都會執行

自定義異常:定義異常類繼承Exception或者RuntimeException
1.為了讓自定義類具備可拋性;
2.讓該類具備操作異常的共性方法,並按java面向對象思想將程序中的異常封裝

異常的好處:1.將問題進行封裝
2.將正常流程代碼和問題處理代碼相分離,方便閱讀
異常的處理原則:
1.處理方式有兩種:try或者throws
2.調用到拋出異常的功能時,拋出幾個就處理幾個。
3.多個catch,父類的catch放到最下面
4.catch內需要定義正對性的處理方式,不要簡單的輸出printStackTrace語句,
也不要不寫,當捕獲到的異常,本功能處理不了時,可以繼續在catch中拋出
異常的註意事項:在子類覆蓋父類方法時,
1.子類拋出的異常必須是父類的異常的子類或者子集;
2.如果父類或者接口沒有異常拋出時,子類覆蓋出現異常只能try不能拋出去

this:代表本類對象,哪個對象調用this所在函數,this就代表哪個對象
final: 1.修飾類,變量(成員變量,靜態變量,局部變量),函數
2.修飾的類不可以被繼承;     3.修飾的函數不可以被覆蓋
4.修飾的變量是一個常量,只能賦值一次

多態類調用:成員變量看左邊,函數看右邊實際實例化的是哪個類

註:throw單獨存在時,下面不要定義語句,因為執行不到。

包package:包與包之間訪問,被訪問包中的類以及類中的成員,需要public修飾
不同包中的子類還可以直接訪問父類中被protected權限修飾的成員
包與包之間可以使用的權限只有兩種:public、protected
       public   protected     default     private
同一個類中   yes     yes        yes     yes
同一個包中   yes     yes        yes     no
子類      yes      yes       no     no
不同包中    yes     no       no     no

java編譯:javac -d sourceFolder ClassName.java .或者省略表示當前目錄
java運行:java package.ClassName

java打包:jar -cfv packageFilePath.jar packA packB
查看包:jar -tvf packageName >d:\jar.txt 輸出詳細信息到jar.txt裏

Java基礎知識_畢向東_Java基礎視頻教程筆記(5-10)