1. 程式人生 > >Java中構造方法,程式碼塊,靜態塊的執行順序

Java中構造方法,程式碼塊,靜態塊的執行順序

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一個子類,所以首先會去初始化父類再去構造子類。而初始化父類的操作是,先是非靜態程式碼塊/變數,最後是建構函式。完成了父類的建立後,按照相同的規則去構造子類。

    我感覺優先順序順序為:靜態程式碼塊>非靜態程式碼塊>構造方法。