聖思園張龍老師關於類加載器的一個例子。
這個打印的是1,1
這個打印的是1,0
造成以上的區別的原因就在於:類加載的時候先準備(靜態變量賦默認值),然後初始化(賦值或者靜態代碼塊),實例化。
類的初始化只有在以下六種情況(主動使用)纔會發生:
- 創建類的實例,並且不影響子類的初始化
- 訪問某個類或者接口的靜態變量或者賦值
- 訪問類的靜態方法
- 反射,比如Class.forName("xxxxxxxxxxxxx")
- 初始化一個類的子類
- 啓動類
類的主動使用:只有訪問當前類或者接口的靜態變量或者方法時,才認爲是主動使用。