構造器如同鴨嘴獸之於哺乳動物——雖屬同類,但差異極大。理解構造器關鍵在於搞清它與方法的本質區別,這對 Java 初學者與認證考生至關重要。
| 維度 | 構造器 | 方法 |
|---|---|---|
| 功能 | 創建類的實例(new Platypus()) | 執行 Java 代碼邏輯 |
| 修飾符 | 不可用 abstract, final, native, static, synchronized | 可用所有修飾符 |
| 返回類型 | 無返回值,甚至不需 void | 必須聲明返回類型或 void |
| 命名慣例 | 與類名相同,大寫開頭,通常為名詞 | 小寫開頭,通常為動詞 |
| this 用法 | 調用本類其他構造器,必須置於第一行 | 指向當前實例,靜態方法不可用 |
| super 用法 | 調用父類構造器,必須置於第一行 | 調用父類被重寫的方法 |
| 繼承性 | 不可繼承 | 可被子類繼承 |
// 源碼
public class Example {}
// 編譯後等效於
public class Example {
Example() {}
}
// 源碼
public class TestConstructors {
TestConstructors() {}
}
// 編譯器自動插入 super()
public class TestConstructors {
TestConstructors() {
super(); // 自動調用父類無參構造器
}
}
public class Platypus {
String name;
// 主構造器
Platypus(String input) {
name = input;
}
// 無參構造器鏈式調用主構造器
Platypus() {
this("John/Mary Doe"); // 必須在第一行
}
public static void main(String[] args) {
Platypus p1 = new Platypus("digger");
Platypus p2 = new Platypus(); // 使用預設名稱
}
}
this() 或 super() 必須位於第一行,否則編譯錯誤掌握這些差異,構造器不再神秘,Java 基礎更扎實。