public class InitOrderTest {
public static String staticField = "靜態變量";
public String field = "實例變量";
static { System.out.println(staticField); System.out.println("靜態塊"); }
{ System.out.println(field); System.out.println("實例塊"); }
public InitOrderTest() { System.out.println("構造器"); }
public static void main(String[] args) { new InitOrderTest(); }
}
輸出:
靜態變量 靜態塊 實例變量 實例塊 構造器
class Parent {
public static String pStatic = "父類-靜態變量";
public String pField = "父類-實例變量";
static { System.out.println(pStatic); System.out.println("父類-靜態塊"); }
{ System.out.println(pField); System.out.println("父類-實例塊"); }
public Parent() { System.out.println("父類-構造器"); }
}
public class SubClass extends Parent {
public static String sStatic = "子類-靜態變量";
public String sField = "子類-實例變量";
static { System.out.println(sStatic); System.out.println("子類-靜態塊"); }
{ System.out.println(sField); System.out.println("子類-實例塊"); }
public SubClass() { System.out.println("子類-構造器"); }
public static void main(String[] args) { new SubClass(); }
}
輸出:
父類-靜態變量 父類-靜態塊 子類-靜態變量 子類-靜態塊 父類-實例變量 父類-實例塊 父類-構造器 子類-實例變量 子類-實例塊 子類-構造器
main 方法執行前,所有靜態成員已完成初始化(含父子類)super(),若父類無無參構造器必須顯式 super(args)先靜後動,先父後子,從上到下,先變後構