Java的類(lèi)加載機(jī)制是指當(dāng)我們?cè)贘ava應(yīng)用程序中使用類(lèi)時(shí),Java虛擬機(jī)(JVM)如何加載并解析這些類(lèi)。
Java的類(lèi)加載機(jī)制是基于委托模型的,也就是說(shuō),當(dāng)需要加載一個(gè)類(lèi)時(shí),JVM會(huì)按照一定的順序向其父類(lèi)加載器詢問(wèn)是否已經(jīng)加載了該類(lèi),如果父類(lèi)加載器沒(méi)有加載過(guò)該類(lèi),則由當(dāng)前類(lèi)加載器加載該類(lèi)。如果當(dāng)前類(lèi)加載器無(wú)法加載該類(lèi),則將請(qǐng)求傳遞給其父類(lèi)加載器,直到Bootstrap ClassLoader。
Java中的類(lèi)加載機(jī)制可以分為三個(gè)階段:
1.加載階段:當(dāng)JVM需要使用一個(gè)類(lèi)時(shí),會(huì)檢查該類(lèi)是否已經(jīng)被加載過(guò)。如果沒(méi)有,則會(huì)通過(guò)ClassLoader加載該類(lèi)。
2.鏈接階段:在鏈接階段,JVM會(huì)驗(yàn)證類(lèi)的二進(jìn)制格式、為類(lèi)分配內(nèi)存并解析類(lèi)中的符號(hào)引用。
3.初始化階段:在初始化階段,JVM會(huì)為類(lèi)的靜態(tài)變量賦初值,并執(zhí)行類(lèi)的靜態(tài)初始化塊。
Java的類(lèi)加載器有三種:
1.Bootstrap ClassLoader:這是Java虛擬機(jī)的內(nèi)置類(lèi)加載器,負(fù)責(zé)加載Java的核心類(lèi)庫(kù),如java.lang和java.util等類(lèi)。
2.Extension ClassLoader:這個(gè)類(lèi)加載器負(fù)責(zé)加載Java的擴(kuò)展庫(kù),如javax等類(lèi)。
3.System ClassLoader:這個(gè)類(lèi)加載器負(fù)責(zé)加載應(yīng)用程序的類(lèi)。
除了上述三種類(lèi)加載器之外,Java還支持自定義類(lèi)加載器,我們可以通過(guò)自定義類(lèi)加載器來(lái)實(shí)現(xiàn)一些特定的需求,如動(dòng)態(tài)加載類(lèi)等。