關於類初始化的一個詭異問題

聖思園張龍老師關於類加載器的一個例子。

這個打印的是1,1

這個打印的是1,0

 

造成以上的區別的原因就在於:類加載的時候先準備(靜態變量賦默認值),然後初始化(賦值或者靜態代碼塊),實例化。

 

類的初始化只有在以下六種情況(主動使用)纔會發生:

  1. 創建類的實例,並且不影響子類的初始化
  2. 訪問某個類或者接口的靜態變量或者賦值
  3. 訪問類的靜態方法
  4. 反射,比如Class.forName("xxxxxxxxxxxxx")
  5. 初始化一個類的子類
  6. 啓動類

類的主動使用:只有訪問當前類或者接口的靜態變量或者方法時,才認爲是主動使用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章