Java變數和(靜態)程式碼塊的執行
本文討論Java中(靜態)變數、(靜態)程式碼塊的執行順序
首先建立3個類:
1、Foo類,用於列印變數
public class Foo { public Foo(String word) { System.out.println(word); } }
2、Parent類
public class Parent { static Foo FOO = new Foo("Parent's static parameter"); Foo foo = new Foo("Parent's parameter"); static { System.out.println("Parent's static code block"); } { System.out.println("Parent's code block"); } public Parent() { System.out.println("Parent.Parent()"); } }
3、Child類
public class Child extends Parent{ static Foo FOO = new Foo("Child's static parameter"); Foo foo = new Foo("Child's parameter");
static { System.out.println("Child's static code block"); } { System.out.println("Child's code block"); } public Child() { System.out.println("Child.Child()"); } }
接下來執行例項:
public class Run { public static void main(String[] args) { new Child(); } }
列印結果:
Parent's static parameter Parent's static code block Child's static parameter Child's static code block Parent's parameter Parent's code block Parent.Parent() Child's parameter Child's code block Child.Child()
總結
java中的靜態變數和靜態程式碼塊是在類載入的時候就執行的,例項化物件時,先宣告並例項化變數再執行建構函式。如果子類繼承父類,則先執行父類的靜態變數和靜態程式碼塊,再執行子類的靜態變數和靜態程式碼塊。同樣,接著在執行父類和子類非靜態程式碼塊和建構函式。
注意:(靜態)變數和(靜態)程式碼塊的也是有執行順序的,與程式碼書寫的順序一致。在(靜態)程式碼塊中可以使用(靜態)變數,但是被使用的(靜態)變數必須在(靜態)程式碼塊前面宣告。
最後給出執行步驟:
1、父類靜態變數和靜態程式碼塊(先宣告的先執行);
2、子類靜態變數和靜態程式碼塊(先宣告的先執行);
3、父類的變數和程式碼塊(先宣告的先執行);
4、父類的建構函式;
5、子類的變數和程式碼塊(先宣告的先執行);
6、子類的建構函式。