java學習筆記

1,在新的class中產生既有class的對象的方法稱爲組合(Composition).它只很單純的重複運用既有程序代碼的功能,而非重複運用其形式;
2,實際接收既有class的形式,並加入新碼,無須更動既有的class的神奇行爲即繼承(inheritance);可通過關鍵字extends來實現;
3,基本型別的數據會被自動初始化爲零,但object reference會被初始化爲null,但編譯器不爲每個reference產生缺省對象。每個非基本型別的對象都具備toString();
4,爲了繼承着想,一般原則是將所有的數據成員聲明爲private,將所有函數聲明爲public;
5,base class會在derived class構造函數取用它之前,先完成本身的初始化動作;編譯器會爲derived class合成一個default構造函數,並在其中調用base class 的構造函數;
6,雖然編譯器會強迫你初始化base classes,並且規定你一定得在構造函數起始處完成,但它並不會看管你是否將成員對象也初始化,得你自己記得;
7,除了內存,最好不要依賴垃圾回收機制;
8,protected指"就此class的使用者來說,這是private。但任何繼承自此一class的derived classes,或位於同一個package內的其他classes,卻可以訪問";
9,繼承代表着一種關係的展現,它代表"這個新的class是一種(is-a)舊的class。";繼承可實現"向上轉型(upcasting)"--"將derived class 轉爲base class"的動作;
10,只有在明顯能夠產生使用價值時,或需要向上轉型時,才使用繼承,否則用組合代替;
11,如果某一筆數據既是static也是final,那麼他會擁有一塊無法改變的存儲空間;
12,可以將null當作final引數。當基本型別引數爲final時,可以讀取引數所代表的值,但無法改變該值;
13,class中所有的private函數自然而然會是final的;final class中的所有函數也都自然是final的;
14,class裝載動作可能發生在class的第一個實體誕生時,或其static成員第一次被取用時;class裝載動作會且只會發生一次。

1,封裝(encapsulation)是藉着"將"特徵(claracteristics)與行爲(behaviors)結合在一起"而產生新的數據型別;
2,隱藏(implementation hidden)則籍由"將細目(details)聲明爲private"而分離出接口(interface)與實現(implementation);
3,先期邦定(early binding)是指邦定動作發生於程序執行前(由編譯器和連接器完成);C編譯器只有一種method call,就是先期綁定;
4,後期綁定(last binding)即綁定動作將在執行器才根據對象型別而進行;後期綁定也稱執行期綁定(run-time binding)或動態綁定(dynamic binding);Java的所有函數,除了別聲明爲final者,皆使用後期綁定;
5,讓程序員"將變動的事物與不變的事物隔離"的所有技術中,多態是最重要的技術之一;
6,如果某個函數名稱和base class函數名稱相同,但引數相異(與返回值類型無關),即爲重載(Overloading);
7,如果class含有單一或多個abstract methods.便須以關鍵字abstract修飾此class,即其爲抽象類;
8,在derived class中,你得爲base class中的所有abstract methods都提供相應的定義;
9,也可以將不含任何abstract methods的class聲明爲abstract。如果你不希望你所撰寫的class杯產生出任何實體,但這個class又不具備"擁有abstract methods"的實際理由時,這項性質便極爲有用。(總結:abstract class不能被組合);
10,將某個class聲明爲abstract,並不強迫你得將所有函數都聲明爲abstract,可以是0個、1個或n個;
11,構造函數不具有多態性;
12,編譯器不允許在繼承過程中降低訪問權限("Friendly"的訪問權限小於protected);
13,應該先執行derived class的終止式,然後纔是base class的終止式。因爲derived class的終止動作可能毀掉用某些base class函數,而這些終止動作的正常運作有賴其"base class成分"仍舊可用才行,所以你不能過早加以摧毀;
14,如果你在構造函數中調用動態綁定的某個函數,會喚起該函數被複寫(Overriden)後的定義。然而其效應無法預期,甚至可能會覆蓋某些難以發現的臭蟲;
15,撰寫構造函數時,"儘可能簡單得讓對象進入正確狀態。如果可以的話,別調用任何函數"。構造函數中唯一可以安全調用的函數便是"base class中的final函數"(這對private函數一樣成立,因爲他們天生就是final),此函數無法被複寫,也就不會產生這一類令人驚訝的結果;
16,當你不知道選擇"繼承"或"組合"手法時,最好選擇組合;
17,"請以繼承表達行爲上的差異,以數據成員表達狀態(state)上的變化";
18,向上轉型(upcating)之後,無法調用derived class新增的函數;
19,向上轉型是安全的,但向下轉型必須要通過"執行期型別辨識"(RTTI);
20,如果不使用數據抽象性和繼承,就不可能瞭解多態並進而運用多態。多態是一個無法單獨對待的特性,只能協同運作,作爲"class相對關係"大局中的一部分。只要不是後期綁定,就不是多態。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章