一. 類的生命周期
加載,驗證,準(zhǔn)備,解析,初始化,使用,卸載
- 加載:通過類名獲取二進(jìn)制字節(jié)流;轉(zhuǎn)為方法區(qū)運行時數(shù)據(jù)結(jié)構(gòu);生成.class
- 準(zhǔn)備時分配內(nèi)存
- 解析:符號引用->直接引用
- 加載,驗證,準(zhǔn)備,初始化,卸載 開始順序一定
初始化條件(初始化前做加載,驗證,準(zhǔn)備):
- new對象,get/put static變量,調(diào)用static方法
- 反射
- 初始化子類時,先初始化父類
- 啟動main類,main類先初始化
- 動態(tài)語言支持,方法對應(yīng)的類
二. 雙親委派模型
每個類加載器都有父類;
一個類加載收到類加載請求,先委派給父類加載器,先到頂層,然后在向下。
- Bootstrap ClassLoader 啟動類加載器
加載\lib中類庫到虛擬機(jī)內(nèi)存 - Extension ClassLoader 擴(kuò)展類加載器
加載\lib\ext中類庫 (開發(fā)可用) - Application ClassLoader 應(yīng)用程序類加載器
系統(tǒng)類加載器,加載ClassPath上指定類庫(開發(fā)可用) - 自定義加載器(繼承ClassLoader)
目的:有了優(yōu)先級層次關(guān)系,防止重復(fù)加載。
- 如何破壞雙親委派
類加載邏輯寫到findClass()中,父類loadClass失敗會調(diào)用子類findClass