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

Java 物件初始化順序完整圖解

     編輯:更多程式設計知識

Java 物件建立過程遵循嚴格順序,理解此機制對繼承體系設計、避免初始化錯誤至關重要。以下代碼演示父/子類別靜態/實例區塊、建構子、欄位初始化的執行順序:

class A {
    { show(0); }          // 父類別實例初始化區塊 1
    int x = 1;            // 父類別欄位初始化
    { show(1); }          // 父類別實例初始化區塊 2
    A() { x = 2; }        // 父類別建構子
    void show(int label) {}
}

class B extends A {
    { show(2); }          // 子類別實例初始化區塊 1
    int y = 1;            // 子類別欄位初始化
    { show(3); }          // 子類別實例初始化區塊 2
    B() { y = 2; }        // 子類別建構子
    void show(int label) {
        System.out.println(label + ": x=" + x + " y=" + y);
    }
}

public class C {
    public static void main(String[] args) {
        new B().show(4);
    }
}

輸出結果

0: x=0 y=0
1: x=1 y=0
2: x=2 y=0
3: x=2 y=1
4: x=2 y=2

初始化順序總結

  1. 為父類別與子類別所有欄位分配記憶體,預設值(0/null/false)
  2. 父類別欄位顯式初始化與實例初始化區塊(按宣告順序)
  3. 父類別建構子執行
  4. 子類別欄位顯式初始化與實例初始化區塊(按宣告順序)
  5. 子類別建構子執行

注意:靜態成員(靜態欄位、靜態區塊)在類別載入階段(首次主動使用類別時)初始化,早於上述實例初始化流程,且父類別靜態優於子類別靜態。

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