Java中(靜態)變數、(靜態)程式碼塊的執行順序包含父類
阿新 • • 發佈:2018-12-24
1、parent類(父類)
public class parent { public static int parentParamOne = 1; public static String parentParamTwo = "two1111"; static{ System.out.println("父類靜態程式碼塊開始執行"); System.out.println("parentParamOne ==" + parentParamOne); System.out.println("parentParamTwo ==" + parentParamTwo); parentParamOne += 2; parentParamTwo = "two2222"; System.out.println("父類靜態程式碼塊開始執行結束"); } public parent(){ System.out.println("父類建構函式開始執行"); System.out.println("parentParamOne ==" + parentParamOne); System.out.println("parentParamTwo ==" + parentParamTwo); parentParamOne += 20; parentParamTwo = "two3333"; System.out.println("父類建構函式開始執行結束"); } }
2、child類
/* * 目標:測試子父類之間關於靜態程式碼與靜態變數 構造方法之間的執行順序 * */ public class child extends parent{ public static int childParamOne = 1; public static String childParamTwo = "two1111"; static{ System.out.println("子類靜態程式碼塊開始執行"); System.out.println("childParamOne ==" + childParamOne); System.out.println("childParamTwo ==" + childParamTwo); childParamOne += 2; childParamTwo = "two2222"; System.out.println("子類靜態程式碼塊開始執行結束!!"); } public child() { System.out.println("childParamOne ==" + childParamOne); System.out.println("childParamTwo ==" + childParamTwo); childParamOne += 222; childParamTwo = "two333"; System.out.println("childParamOne ==" + childParamOne); System.out.println("childParamTwo ==" + childParamTwo); } public static void main(String[] args) { System.out.println("子類主方法開始執行!!!!!"); new child(); } }
3、執行子類child類中的main方法:
執行結果:
總結:
Java中的靜態變數和靜態程式碼塊是在類載入的時候就執行的,例項化物件時,先宣告並例項化變數再執行建構函式。如果子類繼承父類,則先執行父類的靜態變數和靜態程式碼塊,再執行子類的靜態變數和靜態程式碼塊。同樣,接著在執行父類和子類非靜態程式碼塊和建構函式。
注意:(靜態)變數和(靜態)程式碼塊的也是有執行順序的,與程式碼書寫的順序一致。在(靜態)程式碼塊中可以使用(靜態)變數,但是被使用的(靜態)變數必須在(靜態)程式碼塊前面宣告。
最後給出執行步驟:
1、父類靜態變數和靜態程式碼塊(先宣告的先執行);
2、子類靜態變數和靜態程式碼塊(先宣告的先執行);
3、父類的變數和程式碼塊(先宣告的先執行);
4、父類的建構函式;
5、子類的變數和程式碼塊(先宣告的先執行);
6、子類的建構函式。