構造方法、靜態程式碼塊、動態程式碼塊執行順序
阿新 • • 發佈:2018-12-12
超類:
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字串