Java中構造方法,程式碼塊,靜態塊的執行順序
阿新 • • 發佈:2018-12-16
class A{ public A(){ System.out.println("class A");//父類構造方法 } { System.out.println("I am A class ");//父類構造塊 } static { System.out.println("class A static");//父類靜態塊 } } public class B extends A{ public B(){ System.out.println("class B");//子類構造方法 } { System.out.println("i am B class");//子類程式碼塊 } static { System.out.println("class B static");//子類靜態塊 } public static void main(String[] args) { new B(); } }
以上程式碼的執行結果如下:
原因:
當執行一個子類程式時,JVM首先會先完成載入:
先父類再子類,所以會先執行父類和子類的靜態程式碼域。
載入完成後,開始編譯執行(走main方法入口):
main方法的程式碼是要new一個子類,所以首先會去初始化父類再去構造子類。而初始化父類的操作是,先是非靜態程式碼塊/變數,最後是建構函式。完成了父類的建立後,按照相同的規則去構造子類。
我感覺優先順序順序為:靜態程式碼塊>非靜態程式碼塊>構造方法。