在Java中,類加載器(Class Loader)根據(jù)其加載類的來源和工作方式可以分為不同的分類。主要的類加載器分類如下:
1.啟動類加載器(Bootstrap Class Loader):
1.啟動類加載器是Java虛擬機的一部分,它負(fù)責(zé)加載Java平臺核心庫(Java API的一部分,如java.lang、java.util等)。
2.它是虛擬機本身的一部分,通常由C++編寫,不是一個Java對象,也不繼承java.lang.ClassLoader。
2.擴展類加載器(Extension Class Loader):
1.擴展類加載器負(fù)責(zé)加載Java的擴展庫(Java標(biāo)準(zhǔn)庫之外的一些功能,位于jre/lib/ext目錄下)。
2.通常使用Java編寫,是標(biāo)準(zhǔn)的ClassLoader的子類。
3.應(yīng)用程序類加載器(Application Class Loader):
1.應(yīng)用程序類加載器是最常用的加載器,負(fù)責(zé)加載應(yīng)用程序的類,包括應(yīng)用程序自身的類和第三方類庫。
2.通常是系統(tǒng)類加載器的子類,由Java編寫。
4.自定義類加載器:
1.開發(fā)者可以創(chuàng)建自定義類加載器,以實現(xiàn)特定的需求,例如從網(wǎng)絡(luò)加載類、加密類文件等。
2.自定義類加載器需要繼承java.lang.ClassLoader類,并覆蓋其中的方法,例如findClass和loadClass。
另外,還可以根據(jù)加載類的順序?qū)㈩惣虞d器分為以下三個主要類別:
1.雙親委派模型:
1.Java類加載器遵循雙親委派模型,即每個類加載器在嘗試加載一個類之前,會先委派給其父加載器。這種模型有助于確保類加載的一致性和安全性。
2.如果父加載器找不到類,子加載器才會嘗試加載。這意味著一些核心庫類由啟動類加載器加載,而應(yīng)用程序類由應(yīng)用程序類加載器加載。
2.擴展類加載器和應(yīng)用程序類加載器:
1.擴展類加載器和應(yīng)用程序類加載器通常是系統(tǒng)類加載器的子類,它們負(fù)責(zé)加載Java類庫和應(yīng)用程序的類。
2.這兩個加載器通常是自定義類加載器的父加載器,因此開發(fā)者可以擴展它們以實現(xiàn)自定義加載行為。
3.自定義類加載器:
1.自定義類加載器允許開發(fā)者根據(jù)需要實現(xiàn)特定的加載行為,可以加載網(wǎng)絡(luò)上的類、加密的類文件等。
2.自定義類加載器通常不是雙親委派模型中的一部分,開發(fā)者需要自行實現(xiàn)加載邏輯。
這些類加載器的分類和加載機制在Java應(yīng)用程序的類加載過程中起到重要的作用,確保類能夠正確加載和協(xié)同工作。