溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java類的初始化順序

發(fā)布時間:2020-04-23 14:57:17 來源:網(wǎng)絡 閱讀:289 作者:16523574034 欄目:編程語言

多說無益,以下是本人親自試驗的代碼,一目了然:

?????????????????????????????System.out.println("================================"??????????????Child????????String?staticField?=??????????????System.out.println("child靜態(tài)方法塊初始化"???????String?field?=??????????System.out.println("child普通方法塊初始化"????????????????System.out.println("child構造函數(shù)初始化"?????????????????System.out.println("child靜態(tài)屬性初始化"??????????"staticField"?????????????????System.out.println("child普通屬性初始化"??????????"field"???????????String?staticField?=??????????????System.out.println("parent靜態(tài)方法塊初始化"???????String?field?=??????????System.out.println("parent普通方法塊初始化"????????????????System.out.println("parent構造函數(shù)初始化"?????????????????System.out.println("parent靜態(tài)屬性初始化"??????????"staticField"?????????????????System.out.println("parent普通屬性初始化"??????????"field"??}

打印結果:

?????????????????child構造函數(shù)初始化

?

經(jīng)過替換靜態(tài)屬性和靜態(tài)初始化塊的聲明順序發(fā)現(xiàn)靜態(tài)屬性和靜態(tài)初始化塊的初始化順序和聲明順序有關,同理,普通屬性和普通初始化塊的的初始化順序和聲明順序有關

總結:

  1. 當某一個類滿足初始化的條件時(以后的博客中會有總結),先會初始化父類(從頂級父類Object依次向下初始化),然后初始化子類;
  2. 初始化該類時,最先初始化靜態(tài)屬性和靜態(tài)初始化塊(和聲明順序有關),從頂級父類Object依次向下初始化;
  3. 通過new創(chuàng)建對象時,先初始化普通屬性和普通初始化塊(和聲明順序有關),再調(diào)用構造方法,同樣從頂級父類Object依次向下執(zhí)行;
  4. 靜態(tài)屬性和靜態(tài)初始化塊只會初始化一次,類初始化后,再次通過new創(chuàng)建對象,只會重復執(zhí)行第三步。

接下來引用Java編程思想的一句話:

在類的內(nèi)部,變量定義的先后順序決定了初始化的順序,即使變量定義散布于方法定義之間,它們?nèi)耘f會在任何方法(包括構造器)被調(diào)用之前得到初始化。


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI