正如早先指出的那樣,默認構建器是沒有自變量的。它們的作用是創建一個“空對象”。若創建一個沒有構建器的類,則編譯程序會幫我們自動創建一個默認構建器。例如:
//: DefaultConstructor.java 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();
編譯程序就會報告自己找不到一個相符的構建器。就好象我們沒有設置任何構建器,編譯程序會說:“你看來似乎需要一個構建器,所以讓我們給你制造一個吧。”但假如我們寫了一個構建器,編譯程序就會說:“啊,你已寫了一個構建器,所以我知道你想干什麼;如果你不放置一個默認的,是由於你打算省略它。”