類加載簡(jiǎn)單說就是將編寫的類加載到j(luò)vm中,主要分為五個(gè)過程:
1.加載
將.class文件以二進(jìn)制的方式加載到內(nèi)存中,并且聲稱一個(gè)class對(duì)象,提供訪問類數(shù)據(jù)的接口。
2.驗(yàn)證
就是判斷類的二進(jìn)制流是不是符合虛擬機(jī)的格式。
3.準(zhǔn)備
給類變量設(shè)置初始值,并且分配內(nèi)存。
4.解析
將常量池中的符號(hào)引用變成直接引用。
5.初始化
給靜態(tài)變量賦值,執(zhí)行靜態(tài)代碼塊。
雙親委派機(jī)制:
類加載有雙親加載,簡(jiǎn)單說就是每單需要加載類時(shí),子加載器都會(huì)讓父類先加載,最終由最高層級(jí)的啟動(dòng)類加載器來加載,當(dāng)父加載器找不到類時(shí),才會(huì)拋給子類,這個(gè)是防止出現(xiàn)加載混亂,因?yàn)楫?dāng)自己編寫一個(gè)跟系統(tǒng)一樣的類的時(shí)候,父類默認(rèn)會(huì)用系統(tǒng)的,而不至于出現(xiàn)不知道加載那一個(gè)的情況。
當(dāng)然,這種模式也可以打破,要打破這種模式,需要自定義類加載器,并重寫findclass和loadclass方法,這里最重要的是findclass方法,因?yàn)槟J(rèn)都是交個(gè)父類執(zhí)行,這里重寫成由當(dāng)前類來找。關(guān)于為什么要打破這種機(jī)制,是因?yàn)槟J(rèn)走父類的邏輯,但是有些類是要用三方廠商,此時(shí)就需要打破這種機(jī)制。