1.虛擬機器啟動時,指定乙個要執行的主類,虛擬機會優先初始化這個(帶main方法的)主類
public class testmode
public static void main(string args)
}
2.通過陣列定義來引用類,不會觸發類的初始化
class test
}public class testmode ;
for (int m = 0; m < testmodes.length; m++)
}}
3.訪問乙個類的非final靜態欄位或static方法時(訪問fianl欄位時直接從該類常量池中拿取,並不會造成初始化)
class test
}public class newtestdemo_1
}結果為 hello 1
4.遇到new、getstatic、putstatic或invokestatic這四條位元組碼指令時
class test
}public class newtestdemo_1
}
5.使用反射機制等
class test
}public class newtestdemo_1
}
6.當初始化乙個類的時候,如果發現其父類還沒有進行過初始化,則需要先觸發其父類的初始化
class test01
}class test02 extends test01
}public class newtestdemo_1
}
JVM 五 類的初始化
7種主動使用和被動使用,會觸發類的初始化 當初始化類的時候,要求父類都已經被初始化,但是這條規則不適用於介面 inte ce public class test06 inte ce threadparent class threadchild implements threadparent在這個例子...
類初始化和例項初始化
乙個類要建立例項需要先載入並初始化該類 main方法所在的類需要先載入和初始化 乙個子類要初始化需要先初始化父類 乙個類初始化就是執行clinit 方法 clinit 方法由靜態類變數顯式賦值 和靜態 塊組成 類變數顯式賦值 和靜態 塊 從上到下順序執行 clinit 方法只執行一次 父類的初始化 ...
類初始化和例項初始化
father public class father father public inttest public static intmethod son public class sonextends father son public inttest public static intmethod...