1. 程式人生 > >構造方法、靜態程式碼塊、動態程式碼塊執行順序

構造方法、靜態程式碼塊、動態程式碼塊執行順序

超類:

public class A {
    public A() {
        System.out.println("A 類構造方法執行");
    }
    {System.out.println("A 類動態程式碼塊執行");}
    static {System.out.println("A 類靜態程式碼塊執行");}
    
}

子類:

public class B extends A{
    public B() {
        System.out.println("B 類構造方法執行");
    }
    {System.out.println(
"B 類動態程式碼塊執行");} static {System.out.println("B 類靜態程式碼塊執行");} public static void main(String[] args) { System.out.println("start"); new B(); System.out.println("end"); } /* * A 類靜態程式碼塊執行 * B 類靜態程式碼塊執行 * start * A 類動態程式碼塊執行 * A 類構造方法執行 * B 類動態程式碼塊執行 * B 類構造方法執行 * end
*/ }

執行結果分析:

1、載入main方法所在的B類,但B類繼承了A類,所以在載入B類前先載入A類

2、載入B類

3、執行main方法,輸出start字串

4、呼叫構造方法建立B類的物件,但因為B類有父類,所以先呼叫父類A類的構造方法,但在呼叫A類的構造方法前要先呼叫A類的動態方法

5、呼叫父類的構造方法

6、呼叫子類的動態方法

7、呼叫子類的構造方法

8、輸出end字串