建構函式、靜態語句塊、非靜態語句塊的執行順序
阿新 • • 發佈:2019-02-09
1.用來測試的父類
package staticConstruct; public class TestFather { public TestFather() { System.out.println("我是無引數構造,父類"); } public TestFather(String a) { System.out.println("我是有引數構造,父類,引數是" + a); } // 非靜態語句塊 { System.out.println("我是父類的非靜態語句塊!"); } // 靜態語句塊 static { System.out.println("我是父類的靜態語句塊!"); } }
2.用來測試的子類
package staticConstruct; public class TestSon extends TestFather { public TestSon() { System.out.println("我是子類的無引數構造!"); } public TestSon(String a) { System.out.println("我是子類的有引數構造,引數是" + a); } // 非靜態語句塊 { System.out.println("子類的非靜態語句塊!"); } // 靜態語句塊 static { System.out.println("子類的靜態語句塊!"); } }
3.測試方法類
package staticConstruct;
public class TestOrder {
public static void main(String[] args) {
/**
* 子類的靜態語句塊! 我是父類的非靜態語句塊! 我是父類的靜態語句塊! 我是無引數構造,父類 子類的非靜態語句塊! 我是子類的無引數構造!
*/
new TestSon();
// new TestSon("a");
}
}
new TestSon()輸出結果:
我是父類的靜態語句塊!
子類的靜態語句塊!
我是父類的非靜態語句塊!
我是無引數構造,父類
子類的非靜態語句塊!
我是子類的無引數構造!
new TestSon("a")輸出結果:
我是父類的靜態語句塊!
子類的靜態語句塊!
我是父類的非靜態語句塊!
我是無引數構造,父類
子類的非靜態語句塊!
我是子類的有引數構造,引數是a
測試結果:執行順序是父類靜態語句塊>子類靜態語句塊>父類非靜態語句塊>父類的構造>子類的非靜態語句塊>子類的構造
總結:1.靜態語句塊優先順序最高,父類的高於子類的;
2.非靜態語句塊先於構造先執行,先執行父類的再執行子類的。