1. 程式人生 > >Java靜態變數初始化及建構函式的執行順序與執行時機分析

Java靜態變數初始化及建構函式的執行順序與執行時機分析

    對於Java初學者來說,關於靜態變數、非靜態變數的初始化時機與順序,以及建構函式的執行時機與順序都會感覺有點理不清頭緒,下面文章使用例項程式幫大家解決這方面的疑惑。雖然簡單,但是對Java入門者來說還是有一定的幫助作用。

    預備知識:

  1. 程式碼等價於:
  2. 程式碼 等價於:
     
  3. static塊中的初始化程式碼按其在原始碼中的位置順序執行。

    以上內容大家可以參考文章:http://hi.baidu.com/suofang/blog/item/362d4ea77fa5c099d14358cf.html 

     接下來我們對靜態變數初始化、非靜態變數初始化及建構函式的執行時機與執行順序進行分析,首先我們編寫了一個類,程式碼如下:

    在這段程式碼中,包括了靜態變數與非靜態變數的初始化程式碼,還有建構函式,為了驗證這些程式碼的執行時機與執行順序,我們進行了如下實驗:

  1. 在主類中使用Zz類的靜態變數,程式碼如下:顯示結果:
  2. 在主類中呼叫Zz類的靜態函式,程式碼如下:顯示結果:
  3. 在主類中宣告Zz類變數,但不例項化,程式碼如下:顯示結果:無任何內容。
  4. 在主類中宣告Zz類變數,並例項化,程式碼如下:顯示結果:

     結論:

  1. 僅僅在程式碼中申明瞭一個類變數,並不會執行該類的任何變數初始化程式碼,更不用說建構函式。
  2. 在程式碼中申明瞭一個類變數,並例項化,則依次執行該類的如下程式碼:靜態變數初始化程式碼->非靜態變數初始化程式碼->建構函式程式碼。
  3. 在程式碼中使用或者呼叫了一個類的靜態成員(包括靜態變數與靜態函式),則會觸發執行該類的靜態變數初始化程式碼,但不會執行建構函式程式碼。