建構子初始化發生在自動初始化之後,提供運行期決定初始值的彈性。初始化順序遵循嚴格規則:靜態成員 → 非靜態成員 → 建構子本體。
class Tag { Tag(int m) { System.out.println("Tag(" + m + ")"); } }
class Card {
Tag t1 = new Tag(1); // 建構子前初始化
Card() { System.out.println("Card()"); t3 = new Tag(33); }
Tag t2 = new Tag(2);
Tag t3 = new Tag(3);
}
輸出:Tag(1) Tag(2) Tag(3) Card() Tag(33)。欄位按宣告順序初始化,建構子可重新初始化。
static { ... } 區塊執行複雜靜態初始化邏輯Java 1.1 引入 { ... } 區塊(無 static 關鍵字),每次建立實例時執行,支援匿名內部類別初始化:
{ c1 = new Mug(1); c2 = new Mug(2); }
.class 載入 Class 物件掌握初始化順序與機制,能避免繼承體系中微妙的初始化錯誤。