201711671101 《Java程式設計》第七週學習總結
教材學習內容總結
第六章
1.為了克服Java單繼承的缺點,Java使用了介面,一個類可以實現多個介面。使用關鍵字interface來定義一個介面。介面的定義和類的定義很相似,分為介面的宣告和介面體。
a.藉口的宣告格式:
interface 介面的名字
b.介面體:包含常量的宣告和抽象方法兩部分。常量的要求public、static(允許省略public、final、static修飾符)。抽象方法的要求public(允許省略public abstract修飾符)。
2.介面的實現:a.一個類需要在類宣告中使用關鍵字implement宣告該類實現一個或多個介面,介面之間用逗號隔開
b.非抽象類實現了某個介面,那麼這個類必須重寫這個介面中的所有方法,且方法的訪問許可權要明顯地用public修 飾,否則會降低訪問許可權。(抽象類可以重寫,也可以直接擁有介面中的方法)
3.public介面可以被任何一個類實現,而不加public修飾的友好類只能被同一個包的類實現。
4.介面屬於引用型變數,在介面中可以存放實現該介面的類的例項的引用,即存放物件的引用。
5.介面回撥:可以把實現某一個介面的類建立的物件的引用賦值給該介面宣告的介面變數,那麼該介面變數就可以呼叫被類實現 的介面的方法;即當介面變數呼叫被類實現的介面方法時,就是通知相應的物件呼叫這個方法。
(類似上轉型物件呼叫子類重寫的方法)
6.如何理解介面:
a.介面可以抽象出重要的行為標準,該標準用抽象方法表示。
b.可以把實現介面的類的物件的引用賦值給介面變數,該介面變數可以呼叫被該類實現的介面方法。
7.抽象類&介面
a.抽象類與介面都是作為行為標準。
b.抽象類用在同一類別物件。
c.介面更注重行為一致性。
d.抽象類既可以有抽象方法也可以有非抽象方法,既可以有常量也可以有變數;
而介面只可以有抽象方法和常量。
8.介面的多型:不同的類在實現同一個介面時可能具有不同的實現方式,那麼介面變數在回撥介面方法時就可能具有多種形態。
9.介面引數:如果一個方法的引數是介面型別,我們就可以將任何實現該介面的類的例項的引用傳遞給該介面引數,那麼介面引數就可以回撥類實現的介面方法。
10.利用介面也可以體現程式設計的“開-閉原則”,即對擴充套件開放,對修改關閉。
第七章
一、內部類:Java支援在一個類中定義另一個類,這樣的類稱作內部類,而包含內部類的類稱為內部類的外嵌類。
1.內部類與外嵌類的關係
a.內部類的外嵌類的成員變數在內部類中仍然有效,內部類中的方法也可以呼叫外嵌類中的方法。
b.內部類的類體不可以宣告類變數和類方法(即不能有static)。外嵌類的類體中可以內部類宣告物件,作為外嵌類的成員。
c.內部類僅供它的外嵌類使用。
2.宣告內部類如同在類中宣告方法或變數一樣。
3.外嵌類和內部類在編譯時,生成兩個.class檔案。
二、匿名類
一)和子類有關的匿名類:Java允許我們直接使用一個類的子類的類體建立一個子類物件。即建立子類物件時,除了使用父類的構造方法外還有類體,此類體被認為是一個子類去掉類聲明後的類體,稱作匿名類。匿名類就是一個子類,由於無名可用,所以不可能用匿名類宣告物件,但卻可以直接用匿名類建立一個物件。
Eg:假設Bank時類,那麼下列程式碼就是用Bank的一個子類(匿名類)建立物件。
new Bank(){
匿名類的類體
};
二)和介面有關的匿名類:
Eg:假設Computable是一個介面,那麼,Java允許直接用介面名和一個類體建立一個匿名物件,此類體被認為是實現了Computable介面的類去掉類聲明後的類體,稱作匿名類。下列程式碼就是用實現了Computable介面的類(匿名類)建立物件。
new Computable(){
實現介面的匿名類的類體
};
注:如果某個方法的引數是介面型別,那麼可以使用介面名和類體組合建立一個匿名物件傳遞給方法的引數,類體必須要重寫介面中的全部方法。
匿名類的特點:
a.匿名類可以繼承父類的方法也可以重寫父類的方法。
b.使用匿名類時,必然是在某個類中直接用匿名類建立物件,因此匿名類一定是內部類。
c.匿名類可以訪問外嵌類中的成員變數和方法,匿名類的類體中不可以宣告static成員變數和方法。
d.由於匿名類是一個子類,但沒有類名,所以在用匿名類建立物件時,要直接使用父類的構造方法。
三、異常類:
1.Java執行環境就用異常類Exception的相應子類建立一個異常物件,並等待處理。
2.所謂異常就是程式執行時可能出現的一些錯誤。
3.Java使用throw關鍵字丟擲一個Exception子類的例項表示異常發生。
4.Java使用try~catch語句來處理異常,將可能出現的異常操作放在try~catch語句的try部分,將發生異常後的處理放在catch部分。
b.try~catch語句的格式如下:
try {
包含可能發生異常的語句
}
catch(ExceptionSubClass1 e) {
…
}
catch(ExceptionSubClass2 e) {
…
}
a.帶finally子語句的try~catch語句,語法格式如下:
try{}
catch(ExceptionSubClass e){ }
finally{}
其執行機制是在執行try~catch語句後,執行finally子語句。
6.斷言語句用於除錯程式碼階段。在除錯程式碼階段讓斷言語句發揮作用,這樣就可以發現一些致命的錯誤,當程式正式執行時就可以關閉斷言語句,但仍把斷言語句保留在原始碼中,如果以後應用程又需要除錯,可以重新啟用斷言語句。
格式:assert booleanExpression;
assert booleanExpression:messageException;