碼出高效讀書筆記:重新總結類的構造方法及靜態代碼塊

構造方法是方法名與類名相同的特殊方法,在新建對象時調用,可以通過不同的構造方法對對象進行不同的初始化創建,構造方法的特徵如下:

  1. 構造方法名稱必須與類名相同
  2. 構造方法沒有返回值類型,即使是void也不能有。它返回對象的地址,並賦值給引用變量。
  3. 構造方法不能被繼承,不能被覆寫,不能被直接調用。調用的途徑有三種,一是通過new關鍵字,二是在子類的構造方法中通過super調用父類的構造方法,三是通過反射方式獲取並使用。
  4. 類定義時提供了默認了無參構造方法,如果顯式地手動定義了有參構造方法,那麼默認提供的無參構造方法就會被覆蓋;如果依然想擁有無參構造方法,就需要自己手動去定義。
  5. 構造方法可以私有。那麼外部就不能使用私有構造方法創建對象。

在接口中不能定義構造方法,在抽象類中可以定義。在枚舉類中,構造方法是特殊的存在,它可以定義,但不能加public修飾,因爲它默認是private的,是絕對的單例,不允許外部以創建對象的方式生成枚舉對象。

一個類可以有多個參數不同的構造方法,構成構造方法的重載。

構造方法的使命就是在構造對象時進行傳參操作,所以不應該在構造方法中引入業務邏輯。

類中的static{...}被稱爲類的靜態代碼塊,在類初始化時執行,優先級很高,以下面代碼爲例:

class Parent{
    static{ System.out.println("Parent 靜態代碼塊"); }
    public Parent(){ System.out.println("Parent 構造方法"); }
}

class Son extends Parent{
    static{ System.out.println("Son 靜態代碼塊"); }
    son(){ System.out.println("Son 構造方法"); }
    
    public static void main(String[] args){
        new Son();
        new Son();
    }
}

執行結果如下

Parent 靜態代碼塊
Son 靜態代碼塊
Parent 構造方法
Son 構造方法
Parent 構造方法
Son 構造方法

從上面的示例可以看出,在創建類對象時,會先執行父類和子類的靜態代碼塊,然後再執行父類和子類的構造方法。

靜態代碼塊值運行一次,在第二次對象實例化時,不會運行。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  

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