構造函數

  • 又稱“構建器”,函數名稱與類名稱完全相同,無返回值。
  • 每個類都有構造函數。
  • 可以自定義構造函數,并且可以創建多個重載/過載的構造函數。
  • 若沒有手動創建該函數,總會存在一個默認的構造函數(無參數、空函數)。

 

finalize

  • finalize()是Object的protected方法,子類可以覆蓋該方法以實現資源清理工作,GC在回收對象之前調用該方法。
  • finalize()與C++中的析構函數不是對應的。C++中的析構函數調用的時機是確定的(對象離開作用域或delete掉),但Java中的finalize的調用具有不確定性。
  • 不建議用finalize方法完成“非內存資源”的清理工作,但建議用于:① 清理本地對象(通過JNI創建的對象);② 作為確保某些非內存資源(如Socket、文件等)釋放的一個補充:在finalize方法中顯式調用其他資源釋放方法。

 

上溯造型

在調用一個“父類”對象的地方,可以使用其繼承的“子孫類”代替,這時,“子孫類”會被Upcasting(上溯造型)成其“父類”。與之對應的,有“下溯造型”。

 

合成與繼承

合成:在一個新類中,放置另一個類的對象句柄(即新類中實例化另一個類的對象句柄,并通過句柄調用其數據/方法成員);

繼承:關鍵字extends,但繼承是一種最少見的做法。為判斷自己到底應該選用合成還是繼承,一個最簡單的辦法就是考慮是否需要從新類上溯造型回基礎類。若必須上溯,就需要繼承。但如果不需要上溯造型,就應提醒自己防止繼承的濫用。