Java對象初始化順序

來源:互聯網
上載者:User

初始化 順序應該是.

父靜態變數-->子靜態變數-->父非靜態變數-->父靜態代碼塊-->父建構函式------>子非變數-->子靜態代碼塊-->子建構函式

 

以上是網上盛傳的

其實應該是這樣:(大家自己寫代碼驗證)

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

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.