隨著軟體系統複雜度提升,「不安全」的程式設計方式成為維護成本暴增的主因。Java 透過建構子保證初始化、垃圾回收器負責清理,從語言層面解決資源管理難題。本文深度解析初始化的完整生命週期。
核心規則:方法名稱必須相同,只要上述任一條件滿足即構成重載。回傳型別不同不構成重載。
class Flower {
String name;
Flower() { this("Unknown"); } // 呼叫另一個建構子
Flower(String name) { this.name = name; }
// 規則:this() 必須置於第一行,且只能呼叫一個建構子
// 非建構子方法中禁止呼叫建構子
}
int x = 10;{ x = 20; }public Flower() { x = 30; }class Mug {
Mug(int marker) { System.out.println("Mug(" + marker + ")"); }
void f(int marker) { System.out.println("f(" + marker + ")"); }
}
public class Mugs {
Mug mug1;
Mug mug2;
{ // 實例初始化區塊
mug1 = new Mug(1);
mug2 = new Mug(2);
System.out.println("mug1 & mug2 initialized");
}
Mugs() { System.out.println("Mugs()"); }
Mugs(int i) { System.out.println("Mugs(int)"); }
public static void main(String[] args) {
System.out.println("Inside main()");
new Mugs();
System.out.println("new Mugs() completed");
new Mugs(1);
System.out.println("new Mugs(1) completed");
}
}
/* 輸出順序:
Inside main()
Mug(1)
Mug(2)
mug1 & mug2 initialized
Mugs()
new Mugs() completed
Mug(1)
Mug(2)
mug1 & mug2 initialized
Mugs(int)
new Mugs(1) completed
*/
static 不能用於區域變數,僅作用於欄位new、存取靜態成員)觸發類別載入與靜態初始化final,建構子一次性初始化完成AutoCloseable,搭配 try-with-resources,不依賴 finalize()