靜態程式碼、構造方法、構造程式碼塊執行順序
阿新 • • 發佈:2018-12-10
有如下幾個測試類
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