從 `new A()` 到對象可用,JVM 經歷嚴格的 6 步驟;繼承體系下,父子類靜態/實例成員、構造器執行順序更有嚴格規範。本文系統梳理全流程與順序規則。
1. 父類靜態字段/靜態代碼塊(按代碼順序) 2. 子類靜態字段/靜態代碼塊(按代碼順序) 3. 父類實例字段/實例代碼塊(按代碼順序) 4. 父類構造器(隱式/顯式 super()) 5. 子類實例字段/實例代碼塊(按代碼順序) 6. 子類構造器
class Parent {
static { System.out.println("Parent static"); }
{ System.out.println("Parent instance block"); }
Parent() { System.out.println("Parent constructor"); }
}
class Child extends Parent {
static { System.out.println("Child static"); }
{ System.out.println("Child instance block"); }
Child() { System.out.println("Child constructor"); }
}
public class Test { public static void main(String[] args) { new Child(); } }
輸出:
Parent static Child static Parent instance block Parent constructor Child instance block Child constructor