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

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

有如下幾個測試類

package arithmetic;


class Son extends Parent{
    public Son(){
        System.out.println("子類構造方法執行");
    }

    {
        System.out.println("子類構造程式碼塊執行");
    }

    static{
        System.out.println("子類靜態程式碼塊執行");
    }
}

class Parent{
    public Parent(){
        System.out.println("父類構造方法執行");
    }

    {
        System.out.println("父類構造程式碼塊執行");
    }

    static{
        System.out.println("父類靜態程式碼塊執行");
    }
}


只例項化Parent:

public class Demo {
    public static void main(String[] args) {
        Parent parent = new Parent();
    }
}
父類靜態程式碼塊執行
父類構造程式碼塊執行
父類構造方法執行

例項化兩次Parent

public static void main(String[] args) {
        Parent parent = new Parent();
        Parent parent1 = new Parent();
    }
父類靜態程式碼塊執行
父類構造程式碼塊執行
父類構造方法執行
父類構造程式碼塊執行
父類構造方法執行

可見。靜態程式碼塊只執行了一次,只是應為static在類載入時就已經執行了,不管例項化幾次都只執行一次。

結論:對於單個類:Static{} > {} >  constructor

當例項化子類時

public static void main(String[] args) {
        Son son = new Son();
    }
父類靜態程式碼塊執行
子類靜態程式碼塊執行
父類構造程式碼塊執行
父類構造方法執行
子類構造程式碼塊執行
子類構造方法執行

結論:父static  > 子static  > 父{} > 父constructor > 子{} > 子constructor