對於JAVA對象的建立,我們使用這樣的語句:Object myObj = new Object(); 它實際分為三個步驟:
1. Object myObj — 分配儲存空間並建立一個引用變數。
2. new Object() — 建立一個Object對象。
3. = — 將建立的對象引用賦值給 myObj 這個引用變數。
在上邊的第二個步驟,當我們使用了 new 這個關鍵詞時,實際上是做了額外的一些工作來建立我們需要的對象,我們調用了 Object 對象的構造方法。構造方法與類同名,並且不能定義傳回值類型,例如 Object 類的構造方法可能為:
public Object() { // 這裡做一些初始化對象的操作} public Object(int size, String name) { // 這裡做一些類似將size 與 name賦值給執行個體變數等初始化對象的操作 // 從這兩個構造方法可以看出,構造方法可以帶參數,並且在一個類中可以存在多個構造方法,只要它們符合重載的條件即可。 // 符合重載的條件分為兩點:參數的個數不同,相同位置上的參數的類型不同}public Object(String name, int size) { // 這個建構函式與上一個是兩個不同的建構函式,因為他們滿足重載的條件}
構造方法類似一個類的普通方法,但是它並不是類的普通方法,構造方法並沒有定義傳回值類型,而類的方法是必須定義傳回值類型的,這是它與普通類方法的唯一區別。 很多時候在我們編寫一個類時可能並沒有手動編寫一個構造方法,但它的確存在,因為 JVM 會自動對沒有定義構造方法的類添加一個不帶參數的空的構造方法。
為什麼系統已經為我們添加了構造方法,我們還需要來建立自己的構造方法?構造方法最大的作用就是讓我們新建立的的對象在使用前被完整的初始化,想象一個Dog類,它有一個private int height; 執行個體變數,如果沒有構造方法,它剛剛被建立為對象時height值預設是0的,這樣我們就有了一個0高度的狗狗,顯然這樣不好。所以我們需要使用建構函式來初始化我們的對象,例如:
public class Dog { int height; public Dog() { height = 30; } // 當我們添加了自己的構造方法後,系統將不再為我們手動添加不帶參數的建構函式 // 這樣當我們的類的使用者使用不帶參數的構造方法建立對象時會產生錯誤,所以一般情況下建議 // 為類添加一個不帶參數的構造方法,並在其中給類的一些重要的執行個體變數一個預設值。 public Dog(int newHeight) { height = newHeight; } // 對不帶參數的構造方法的重載 }public class TestDog { Dog myDog = new Dog(40); System.out.print ( myDog.height );}