Java中構造函數是一種特殊的函數,用來在對象實例化時初始化對象的成員變量。在Java語言中,構造函數具有以下幾個特點:
- 構造函數必須與類名相同,并且不能有返回值(返回值是void也不行);
- 每個類可以有多個構造函數。當開發人員沒有提供構造函數時,編譯器在把源代碼編譯成字節碼的過程中會提供一個沒有參數默認的構造方法,但該構造函數不會執行任何代碼,如果開發人員提供了構造函數,那么編譯器就不會再創建默認的構造函數;
- 構造函數可以任意個參數;
- 構造函數總是伴隨著new操作儀器調用,且不能由程序的編寫者直接調用,必須要由系統調用。構造函數在對象實例化的時候回被自動調用,且只運行一次,而普通的方法是在程序執行到它的時候被調用,且可以被對象調用多次;
- 構造函數的主要工作是完成對象的初始化操作;
- 構造函數不能被繼承,因此它不能被覆蓋,但是構造函數能夠被重載,可以使用不同的參數格式或者參數類型來定義多個構造函數;
- 子類可以通過super關鍵字來顯式調用父類的構造函數,當父類沒有提供無參數的構造函數時,子類的構造函數中必須顯示地調用父類的構造函數。如果父類提供了無參數的構造函數,此時子類的構造函數就可以不顯式地調用父類的構造函數,在這種情況下編譯器會默認調用父類提供的無參構造函數。當有父類時,在實例化對象時會執行性父類的構造函數,然后執行子類的構造函數;
- 當父類和子類都沒有定義構造函數時,編譯器會為父類生成一個默認的無參構造函數,給子類也生成一個無參構造函數。此外,默認構造器的修飾符只跟當前類的修飾符有關(例如,如果一個類被定義為public,那么它的構造函數也是public);
舉例
<code>
public class Test{
//無參類型構造函數
public Test(){
}
//帶參類型構造函數
public Test(String arg){
}
//類方法
public void Test(){
}
}
</code>