1. 程式人生 > >Java的構建器(Constructor)

Java的構建器(Constructor)

Java 中,提供了名為“構建器”的一種特殊方法,所以類的設計者可擔保每個物件都會得到正確的初始化。若某個類有一個構建器,那麼在建立物件時,Java 會自動呼叫那個構建器——甚至在使用者毫不知覺的情況下。構建器的名字與類名相同。這樣一來,可保證象這樣的一個方法會在初始化期間自動呼叫。

構建器屬於一種較特殊的方法型別,因為它沒有返回值。這與void 返回值存在著明顯的區別。對於void 返回值,儘管方法本身不會自動返回什麼,但仍然可以讓它返回另一些東西。構建器則不同,它不僅什麼也不會自動返回,而且根本不能有任何選擇。若存在一個返回值,而且假設我們可以自行選擇返回內容,那麼編譯器多少要知道如何對那個返回值作什麼樣的處理。

預設構建器是沒有自變數的。它們的作用是建立一個“空物件”。若建立一個沒有構建器的類,則編譯程式會幫我們自動建立一個預設構建器。

class Bird {
int i;
}
public class DefaultConstructor {
public static void main(String[] args) {
Bird nc = new Bird(); // default!
}
} ///:~
對於下面這一行:
new Bird();
它的作用是新建一個物件,並呼叫預設構建器——即使尚未明確定義一個象這樣的構建器。若沒有它,就沒
有方法可以呼叫,無法構建我們的物件。然而,如果已經定義了一個構建器(無論是否有自變數),編譯程
序都不會幫我們自動合成一個:
class Bush {
Bush(int i) {}
Bush(double d) {}
}
現在,假若使用下述程式碼:
new Bush();
編譯程式就會報告自己找不到一個相符的構建器。就好象我們沒有設定任何構建器,編譯程式會說:“你看
來似乎需要一個構建器,所以讓我們給你製造一個吧。”但假如我們寫了一個構建器,編譯程式就會說:
“啊,你已寫了一個構建器,所以我知道你想幹什麼;如果你不放置一個預設的,是由於你打算省略它。”