1. 程式人生 > >Java面試題之什麽情況下會觸發類的初始化

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

初始化 面試題 試題 lan hand 主類 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. 引用一個類的常量也不會觸發類的初始化

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