java面試一日一題:講下在什麼情況下會發生類載入

迷茫中守候發表於2021-04-23

問題:請講下在什麼情況下會發生類載入?

分析:該問題主要考察對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提供的動態語言支援;

 

相關文章