當執行 new DerivedClass() 時,JVM 會經歷嚴格有序的初始化序列,涉及類加載、內存分配、構造器鏈調用等關鍵步驟。理解此過程對掌握繼承機制、靜態/實例初始化順序至關重要。
BaseClass 的加載、驗證、準備、解析。DerivedClass,為類變量(static 字段)分配內存並賦默認值。<clinit>: 按源碼順序執行靜態變量顯式賦值語句與 static {} 靜態初始化塊,右值可為方法調用。為實例變量(非 static 字段)分配堆內存並設置默認值(0、null、false 等)。
super(),遞歸完成父類初始化。<init>: 按聲明順序執行實例變量顯式賦值與 {} 實例初始化塊。new 發生,順序:父類靜態 → 子類靜態 → 父類實例 → 父類構造器體 → 子類實例 → 子類構造器體。super() 必須為構造器首條語句,否則編譯器自動插入無參 super();若父類無無參構造器將導致編譯錯誤。