Java的構造函數詳解

什麼是構造函數

構造函數是一種特殊的函數,用來在對象實例化時初始化對象的成員變量。在Java語言中,構造函數具有以下特點:

  1. 構造函數必須與類的名字相同,並且不能有返回值(連void也不能寫)。
  2. 每個類可以有多個構造函數。當開發人員沒有提供構造函數時,編譯器在把源碼編譯成字節碼的過程中會提供一個沒有參數默認的構造函數,但該構造函數不會執行任何代碼。如果開發人員提供了構造函數,那麼編譯器就不會再創建默認的構造函數了。
  3. 構造函數可以有0個、1個或者1個以上的參數。
  4. 構造函數總是伴隨着new操作一起調用,且不能由程序的編寫者直接調用,必須要由系統調用。構造函數在對象實例化時會被自動調用,且只運行一次。
  5. 構造函數的主要作用是完成對象的初始化工作
  6. 構造函數不能被繼承,因此,它不能被覆蓋,但是構造函數能夠被重載,可以使用不同的參數個數或參數類型來定義多個構造函數。
  7. 子類可以通過super關鍵字來顯式地調用父類的構造函數,當父類沒有提供無參數的構造函數時,子類的構造函數中必須顯式地調用父類的構造函數。如果父類提供了無參數的構造函數,子類的構造函數就可以不顯式地調用父類的構造函數,在這種情況下編譯器會默認調用父類提供的無參構造函數。當有父類時,在實例化對象時會先執行父類的構造函數,然後執行子類的構造函數。
  8. 當父類和子類都沒有定義構造函數時,編譯器會爲父類生成一個默認的無參構造函數,給子類也生成一個默認的無參構造函數。

引申

普通方法是否可以與構造函數有相同的方法名?

可以

public class Test() {
	public Test() {
    	System.out.println("construct");
    }
    public void Test() {
    	System.out.println("call Test");
    }
    public static void main (String[] args) {
    	Test a = new Test();	// 調用構造函數
        a.Test();	// 調用Test方法
    }
}

 

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