java 的類加載機制分三步,加載 ---連接 ---初始化
加載: 將.class文件中的二進制數據讀入到內存中,把它存放在運行時數據區的反方法區內,然后在堆區創建一個java.lang.Class對象,用來封裝類在方法區內的數據結構。
jvm加載類二進制數據有這幾種途徑:
a: 把一個java源文件動態編譯成class文件。
b: 從一個本地文件系統中加載class文件。
c: 通過網絡下載類的.class文件。比如:applat.
d: 從Zip,jar或其它類型的歸檔文件中提取.class文件。
e: 從一個專有的數據庫中提取.class文件。
連接:包括三個過程: 驗證,準備,和解析。其中驗證主要是檢查與語法上的錯誤。準備將靜態變量賦上其類型默認值。
解析:將符號引用轉變為直接引用。
初始化:將靜態變量賦上初始值,執行靜態代碼快,其順序是從上到下的順序執行。
類加載器在加載不了類的時候,并不一定報錯,而是類在第一次主動使用的時候,才會去報加載錯誤信息。
類首次主動使用,大概有這些情況:
1:調用了類的靜態方法或變量。
2:用反射的方式創建對象。