初始化 順序應該是.
父靜態變數-->子靜態變數-->父非靜態變數-->父靜態代碼塊-->父建構函式------>子非變數-->子靜態代碼塊-->子建構函式
以上是網上盛傳的
其實應該是這樣:(大家自己寫代碼驗證)
1. 父類靜態成員和靜態初始化塊 ,按在代碼中出現的順序依次執行 2. 子類靜態成員和靜態初始化塊 ,按在代碼中出現的順序依次執行 3. 父類執行個體成員和執行個體初始化塊 ,按在代碼中出現的順序依次執行 4. 父類構造方法 5. 子類執行個體成員和執行個體初始化塊 ,按在代碼中出現的順序依次執行 6. 子類構造方法 附測試代碼:
package test2;</p><p>/**<br /> * @author Lansine<br /> *<br /> */<br />public class PrintClass {</p><p>/**<br /> * @param args<br /> */<br /> public static void main(String[] args){<br /> new B();<br /> }<br /> PrintClass(String var) {<br /> System.out.println(var);<br /> }<br />} package test2;</p><p>/**<br /> * @author Lansine<br /> *<br /> */<br />class A {<br />static PrintClass pClassA1 = new PrintClass("A. 靜態成員的初始化1");<br />static {<br />System.out.println("A. 靜態初始化塊1");<br />}<br />static {<br />System.out.println("A. 靜態初始化塊2");<br />}</p><p>static PrintClass pClassA2 = new PrintClass("A. 靜態成員的初始化2");<br />{<br />System.out.println("A. 執行個體初始化塊1");<br />}</p><p>PrintClass pClassA = new PrintClass("A. 執行個體成員的初始化");<br />{<br />System.out.println("A. 執行個體初始化塊2");<br />}</p><p>public int Avar;</p><p>public A() {<br />System.out.println("A. 構造方法");<br />doSomething();<br />}</p><p> private void doSomething() {<br />//public void doSomething() {<br />Avar = 1111;<br />System.out.println("Avar=" + Avar);<br />}<br />}
package test2;</p><p>/**<br /> * @author Lansine<br /> *<br /> */<br />public class B extends A {</p><p>public static void main(String[] args) {<br />new B();<br />}</p><p>public int Bvar = 2222;<br />{<br />System.out.println("B. 執行個體初始化塊1");<br />}<br />{<br />System.out.println("B. 執行個體初始化塊2");<br />}</p><p>PrintClass pClassB = new PrintClass("B. 執行個體成員的初始化");<br />static {<br />System.out.println("B. 靜態初始化塊1");<br />}</p><p>static PrintClass pClassB1 = new PrintClass("B. 靜態成員的初始化1");</p><p>static PrintClass pClassB2 = new PrintClass("B. 靜態成員的初始化2");<br />static {<br />System.out.println("B. 靜態初始化塊2");<br />}</p><p>public B() {<br />System.out.println("B. 構造方法");<br />doSomething();<br />}</p><p>public void doSomething() {<br />System.out.println("Bvar=" + Bvar);<br />}</p><p>}測試結果:A. 靜態成員的初始化1<br />A. 靜態初始化塊1<br />A. 靜態初始化塊2<br />A. 靜態成員的初始化2<br />B. 靜態初始化塊1<br />B. 靜態成員的初始化1<br />B. 靜態成員的初始化2<br />B. 靜態初始化塊2<br />A. 執行個體初始化塊1<br />A. 執行個體成員的初始化<br />A. 執行個體初始化塊2<br />A. 構造方法<br />Avar=1111<br />B. 執行個體初始化塊1<br />B. 執行個體初始化塊2<br />B. 執行個體成員的初始化<br />B. 構造方法<br />Bvar=2222