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. 在代碼中使用或者調用了一個類的靜態成員(包括靜態變量與靜態函數),則會觸發執行該類的靜態變量初始化代碼,但不會執行構造函數代碼。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章