靜態代碼塊會在類初始化階段執行。
final static 類型的成員,不會初始化類。
父類的static類型的變量,只會初始化父類,不會初始化子類。
定義類的數組類型變量,不會觸發初始化。
如下幾種情形,如果類未初始化,對類進行初始化
1.創建類的實例。
2.訪問靜態變量(除了常量【被final修辭的靜態變量】原因:常量是一種特殊的變量,因為編譯器把他們當成值而不是域來對待。如果你的代碼中用到常變量,編譯器會直接把這個值插入到引用常量的位置的字節碼中。但是你需要改變final域的值,每一塊域的代碼都需要重新編譯)
3.訪問類的靜態方法。
4.反射,如(Class.forName(“my.xyz.Test”))
5.初始化一個類的時候,如果父類還未初始化,則先觸發父類的初始化
6.虛擬機啟動的時候,定義了main方法的那個類先初始化。