Java有三種類加載器,分別是啟動類加載器(Bootstrap ClassLoader)、擴展類加載器(Extension ClassLoader)和應(yīng)用程序類加載器(Application ClassLoader)。
啟動類加載器(Bootstrap ClassLoader):負責(zé)加載Java的核心類庫,例如Java API中的rt.jar和resources.jar等。它是JVM內(nèi)置的類加載器,通常由JVM的實現(xiàn)提供。
擴展類加載器(Extension ClassLoader):負責(zé)加載Java擴展類庫,例如Java API中的ext目錄中的jar包。它是由JVM的實現(xiàn)提供的類加載器,通常是在啟動類加載器之后加載的。
應(yīng)用程序類加載器(Application ClassLoader):負責(zé)加載應(yīng)用程序中的類,例如Java應(yīng)用程序中的jar包。它是由Java開發(fā)者自己提供的類加載器,通常是在擴展類加載器之后加載的。
類加載器的工作原理如下:
類加載器首先從文件系統(tǒng)、網(wǎng)絡(luò)等地方獲取類文件的字節(jié)碼。
類加載器將獲取到的字節(jié)碼加載到JVM的內(nèi)存中,并將其轉(zhuǎn)換成運行時數(shù)據(jù)結(jié)構(gòu)(例如Java類)。
類加載器為加載的類分配一個唯一的標(biāo)識符,并將其保存在運行時數(shù)據(jù)結(jié)構(gòu)中,以便后續(xù)的訪問。
類加載器將加載的類的依賴類遞歸加載,并通過Java虛擬機的鏈接階段來解析它們之間的關(guān)系。
最后,類加載器將運行時數(shù)據(jù)結(jié)構(gòu)中的類提交給Java虛擬機執(zhí)行。
總的來說,類加載器的工作是將類文件加載到JVM內(nèi)存中,并將其轉(zhuǎn)換為可執(zhí)行的Java類。通過使用不同的類加載器,Java程序可以實現(xiàn)動態(tài)加載類、版本控制、代碼隔離等功能。