1. 程式人生 > >static程式碼塊、成員變數初始化、構造方法執行順序

static程式碼塊、成員變數初始化、構造方法執行順序

下面程式碼:

public class Son{
    Father father = new Father();
    static{
        System.out.println("Son static");
    }
    public Son(){
        System.out.println("Son()");
    }
}

public class Father {
    static{
        System.out.println("Father static");
    }
    public Father(){
        System.out.println("Father()"
); } } public class Main{ public static void main(String[] args){ Son son = new Son(); } }

結果:

Son static
Father static
Father()
Son()

結論

先執行static程式碼塊,再初始化成員變數,再執行構造方法。

下面程式碼:

public class Son extends Father{
    //Father father = new Father();
    static{
        System.out.println("Son static"
); } public Son(){ System.out.println("Son()"); } } public class Father { static{ System.out.println("Father static"); } public Father(){ System.out.println("Father()"); } } public class Main{ public static void main(String[] args){ Son son = new
Son(); } }

結果:

Father static
Son static
Father()
Son()

結論

先執行父類的static程式碼塊,再執行子類static,再執行構造方法。

下面程式碼:

public class Son extends Father{
    Father father = new Father(1);
    static{
        System.out.println("Son static");
    }
    public Son(){
        System.out.println("Son()");
    }
}

public class Father {
    static{
        System.out.println("Father static");
    }
    public Father(){
        System.out.println("Father()");
    }
    public Father(int a){
        System.out.println("Father(1)");
    }
}

public class Main{
    public static void main(String[] args){
        Son son = new Son();
    }
}

結果:

Father static
Son static
Father()
Father(1)
Son()

結論

先執行父類的static程式碼塊,再執行子類static,再執行父類構造方法,再再初始化成員變數,再走子類構造方法剩下的。