首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 建構子初始化順序與靜態/實例初始化區塊詳解

     編輯:Java 相關知識

建構子初始化發生在自動初始化之後,提供運行期決定初始值的彈性。初始化順序遵循嚴格規則:靜態成員 → 非靜態成員 → 建構子本體。

初始化順序實證

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); }

物件建立完整流程

  1. 尋找 .class 載入 Class 物件
  2. 執行所有靜態初始化
  3. 堆疊配置記憶體並清零
  4. 執行欄位初始化運算式
  5. 執行建構子

掌握初始化順序與機制,能避免繼承體系中微妙的初始化錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved