問題:請講下在什麼情況下會發生類載入?
分析:該問題主要考察對java中類載入的知識,什麼是類載入,為什麼會發生類載入,什麼情況下發生類載入?
回答要點:
主要從以下幾點去考慮
1、什麼是類載入;
2、為什麼會發生類載入;
3、什麼情況下發生類載入;
大家都知道java程式要執行,必須要把原始檔(.java)編譯成位元組碼(.class),jvm的輸入是位元組碼檔案,需要把位元組碼檔案載入到jvm記憶體中,如何解析位元組碼檔案,按照什麼樣的規則去解析,解析後放在記憶體中的什麼位置,這些過程可以理解未類載入。通俗點講,一個java檔案要執行必須通過類載入的過程,轉化為JVM可以識別的資料結構。在JVM中規定了載入的步驟,可參考:《java面試一日一題:java的類載入過程》
至於為什麼會發生類載入的過程,那肯定是要執行java程式,因為java源程式JVM是不可識別的,編譯後的位元組碼檔案JVM可以識別,但是也要轉化成JVM可以識別的資料結構,所以要有類載入的過程;
java程式對類的使用分為主動使用和被動使用,只有主動使用才會發生類的載入,下面看發生類載入的情形,
1、訪問類的靜態變數,如果類沒有載入,則首先會執行類載入;
2、訪問類的靜態方法,如果類沒有載入,則首先會執行類載入;
3、初始化一個類的子類的時候,如果子類沒有載入,則首先執行子類的載入;
4、使用new關鍵字,生成一個物件,如果該類沒有載入,則首先載入該類;
5、使用反射,Class.forName();如果該類沒有載入,則執行該類的載入;
6、標記為啟動類的類,如果沒有載入則首先執行該類的載入,常見的是main方法所在的類;
7、1.7提供的動態語言支援;