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

Java 繼承初始化全流程:靜態初始化、基類構造、成員初始化、衍生構造

     編輯:Java 相關知識

Beetle 繼承 Insect 完整追蹤

class Insect {
    int i = 9; int j;
    Insect() { prt("i=" + i + ", j=" + j); j = 39; }
    static int x1 = prt("static Insect.x1 initialized");
}
class Beetle extends Insect {
    int k = prt("Beetle.k initialized");
    Beetle() { prt("k=" + k); prt("j=" + j); }
    static int x2 = prt("static Beetle.x2 initialized");
}

運行輸出與階段解析

static Insect.x1 initialized      ← 1. 基類靜態初始化(類加載時)
static Beetle.x2 initialized      ← 2. 衍生類靜態初始化
Beetle constructor                ← 3. main 打印
i = 9, j = 0                      ← 4. 基類構造器:i=9(顯式), j=0(默認零值)
Beetle.k initialized              ← 5. 衍生類成員初始化
k = 63                            ← 6. 衍生構造器:k=63(prt返回值)
j = 39                            ← 7. 基類構造器中 j=39 已生效

完整初始化順序鐵律

  1. 靜態初始化:按繼承層次自上而下(基類→衍生類),僅類首次加載時執行一次。
  2. 分配內存並清零:所有基本類型置 0/false,引用置 null。
  3. 基類構造器:遞歸向上執行,最先執行 Object 構造器。
  4. 衍生類成員初始化:按聲明順序執行顯式初始化/初始化塊。
  5. 衍生類構造器主體:執行構造器剩余代碼。

關鍵認知

  • 靜態初始化與對象創建無關,類加載即觸發。
  • 基類構造器運行時,衍生類成員仍為零值(詳見構造器多態陷阱)。
  • 成員初始化在基類構造器之後、衍生構造器主體之前。
  • 不創建對象也會執行靜態初始化(註釋掉 new Beetle() 驗證)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved