程式碼塊執行順序
阿新 • • 發佈:2018-12-21
程式碼塊
public class Hello {
public static void main(String[] args) {
new B();
new B();
new B();
}
}
class A {
static {
System.out.println("父類A靜態塊");
}
{
System.out.println("父類A構造塊");
}
public A() {
System.out.println("父類A構造方法");
}
}
class B extends A {
static {
System.out.println ("子類B靜態塊");
}
{
System.out.println("子類B構造塊");
}
public B() {
System.out.println("子類B構造方法");
}
}
輸出結果
父類A靜態塊
子類B靜態塊
父類A構造塊
父類A構造方法
子類B構造塊
子類B構造方法
父類A構造塊
父類A構造方法
子類B構造塊
子類B構造方法
父類A構造塊
父類A構造方法
子類B構造塊
子類B構造方法
總結
- 靜態塊,構造塊,構造方法的執行順序都是父類優先
- 靜態塊優先構造塊,構造塊優先於構造方法
- 靜態塊無論多少個例項,都只執行一次,靜態塊絕對優先,父類子類靜態塊執行完,再執行父類的構造塊
- 父類執行完構造塊構造方法,再執行子類的構造塊構造方法