Java面試題之什么情況下會觸發類的初始化


以下情況會觸發類的初始化:

  1. 遇到new,getstatic,putstatic,invokestatic這4條指令;
  2. 使用java.lang.reflect包的方法對類進行反射調用;
  3. 初始化一個類的時候,如果發現其父類沒有進行過初始化,則先初始化其父類(注意!如果其父類是接口的話,則不要求初始化父類);
  4. 當虛擬機啟動時,用戶需要指定一個要執行的主類(包含main方法的那個類),虛擬機會先初始化這個主類;
  5. 當使用jdk1.7的動態語言支持時,如果一個java.lang.invoke.MethodHandle實例最后的解析結果REF_getstatic,REF_putstatic,REF_invokeStatic的方法句柄,並且這個方法句柄所對應的類沒有進行過初始化,則先觸發其類初始化;

以下情況不會觸發類的初始化:

  1. 同類子類引用父類的靜態字段,不會導致子類初始化。至於是否會觸發子類的加載和驗證,取決於虛擬機的具體實現;
  2. 通過數組定義來引用類,也不會觸發類的初始化;例如:People[] ps = new People[100];
  3. 引用一個類的常量也不會觸發類的初始化


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM