筆記
61、每個類 只有一個類變數,屬於該類的對象會共用類變數。不需要通過對象來存取類變數。
62、一個static方法只能存取類的static資料;一個static方法只能存取類的static方法;無法在算他題
詞方法中使用this;一個static方法無法被非static方法所替代。
63、建構函式並沒有傳回值,它需和所在的類同名,如果所用的類並沒有建構函式,Java編譯器會自動生
成一個預設建構函式(不含參數)。
64、Java中,new是不可省略的,使用new表示該變數的記憶體是動態分配的,但必須記得將該記憶體釋放掉。
65、基礎資料型別 (Elementary Data Type)將其值存放在堆棧中,而引用資料類型是將其引用存在堆棧中,但其所引用的對象則是
存在堆(heap)中。
66、Java有引用資料類型和基礎資料型別 (Elementary Data Type),但只有一種傳遞方法,即通過數值傳遞(pass-by-value),
並沒有通過引用傳遞(pass-by-reference)。方法接收到的是一份原來值的複製,對於基礎資料型別 (Elementary Data Type),
所接收到的是一份該資料值的複製;而對於引用資料類型,所接收到的是一份該引用值的複製,而不是該
引用本身。
67、如果要在Java中達到像C/C++的通過引用傳遞的效果,一個辦法是把數組作為參數。
68、除了聲明為private的資料成員外,同一個包的類可以繼承其他所有的資料成員,而其他包的類可以
繼承public和protected的資料成員。這些準則適用於所有的資料成員(類或執行個體變數),同時也適應於
方法,但父類的建構函式並不會被繼承。對定義為final的成員也無法被繼承。
69、在使用方法重載時無法在同一個類中聲明簽名(方法名、參數數目、參數類型)相同但傳回值不同的
方法。
70、將方法重載稱為靜態方法綁定或先期綁定,這是由於在編譯時間編譯器會根據參數的類型和數目來決定
調用哪個方法,而不是在執行時決定。
71、可以將許多的類放在同一個檔案中,但只能有一個類聲明為public,其他的類稱為輔助(helper)類
,輔助類也可包含main(),但會被忽略。
72、以下情況,此類必須聲明為abstract:
該類有一個或超過一個abstract方法(聲明但沒有定義的方法)
該類從一個abstract類繼承一個或超過一個abstract方法,但沒有提供這些方法的實現方法
該類實現一個介面,但沒有將該介面所有的方法加以實現
73、abstract方法不能被聲明為private,因為abstract類會被其他類繼承。無法產生一個abstract類的
對象,但可聲明一個abstract類類型的變數。
74、多態(polymorphism)代表同樣的標記法可用來處理多種不同類型的資料。重載是多態的一種,稱為
靜態多態。一般的多態是動態多態,是在執行時才根據對象來決定一個方法的行為,這是一種動態方法綁
定(後期綁定)。
75、C++中,多態通過虛擬函數實現,Java使用abstract類實現多態。
76、介面是用來表明一個類能做什麼,但不表明如何完成(實際的工作會交由使用此介面的程式員來完成
),因此常使用介面來制定類設計的協議(protocol),而Java API設計的主要精神就是將介面和實際類
的實現分開,因為不同的系統可能會有不同的實現方法,但使用者所使用的方式卻是一樣的,這可解決可移
植性問題。
77、介面和類一樣可當作一種資料類型,但和abstract類一樣,無法用它來產生新的對象。
78、一個介面是一群常量和abstract方法的組合,介面內的常量總是為public和static以及final(因此
,有時我們只會單純地使用介面來儲存使用者自訂地常量而不包含任何方法),而方法總為public和
abstract,即使沒有明確地聲明。
79、一個類可通過關鍵字implements來實現介面,而類可實現一個以上的介面。
80、和類定義相同,一個介面可通過extends來繼承其他介面,不同的是,介面支援多重繼承,這是由於
介面內方法未定義,並不會產生類多重繼承的問題。
81、和abstract類不同的是,當一個類實現介面,此類必須定義所有介面內的方法。
82、將介面和abstract類結合在一起。除了使用介面來進行多重繼承外,一個常用的設計方式是使用介面
來產生新的資料類型,但不會被特定的實現方式限制住,這有點類似基礎資料型別 (Elementary Data Type),並不會產生該類型的
對象,也沒有實現任何方法。而abstract類也可用來定義新的資料類型,但會選擇性地實現共同地方法。
當然,一般地類也可用來定義新地資料類型,但會實現全部地方法。因此,在設計一個較有擴充性地資料
類型時,往往會以介面為最上面一層,再以abstract類為中間的一層,而下面則為一般的類。
83、將類定義在另一個類內稱為內部類。
84、匿名類是一種沒有名稱的內部類,它也沒有建構函式。如:
button.addActionListener(new ActionListener()
{
用來實現ActionListener的程式主體
}//此對象僅用於addActionListener()中
)
85、在Java中,最常使用內部類和匿名類的地方是GUI。
86、由於匿名類並沒有名稱,因此產生的類檔案會用數字表示,如Outer$1.class
87、記憶體回收:一個較好的方法是將不用的對象設為null。
88、強制執行記憶體回收:System.gc()。
89、finalize()是在對象釋放前先執行,它是所有Java對象都會繼承的方法。
90、產生包:只要在所定義的類程式的最前面加上package{packageName};放在import之前