java類加載器及其原理

java類加載器 :

java中默認有三種類加載器:引導類加載器,擴展類加載器,系統類加載器(也叫應用類加載器)

類加載器是Java最強大的特征之一。但是開發者常常忘記類加載組件。類加載器是在運行時負責尋找和加載類文件的類。Java允許使用不同的類加載器,甚至自定義的類加載器。

Java 程序包含很多類文件,每一個都與單個Java類相對應,這些類文件不像靜態C程序,一次性加載入內存,它們隨時需要隨時加載。這就是類加載器與眾不同的地 方。它從源文件(通常是.class 或 .jar文件)獲得不依賴平臺的字節碼,然后將它們加載到JVM內存空間,所以它們能被解釋和執行。默認狀態下,應用程序的每個類由 java.lang.ClassLoader加載。因為它可以被繼承,所以可以自由地加強其功能。

使用自定義類加載器的原因

默認的 java.lang.ClassLoader僅僅可以從加載本地文件系統的類。Java被設計成不論本地磁盤或網絡都有足夠的彈性加載類,并且可以在加載 之前處理特殊事物。例如:應用程序可以檢查Web站點或FTP上插入類的更新版本并且自動校驗數字簽名確保執行可信任的代碼。許多眾所周知的軟件都使用自 己的類加載器。

通常默認加載器是所謂的bootstrap類加載器;它負責加載諸如java.lang.Object等關鍵類和加 載其他rt.jar文件的運行時代碼到內存。因為Java語言規范沒有提供bootstrap類加載器的詳細信息,不同的JVM可能有不同的類加載器。如 果看到網頁上有applets在運行,則它使用的是自定義類加載器。嵌入到瀏覽器中的applet閱讀器包含了可以訪問遠程服務器上站點的類加載器,它可 以通過HTTP加載原始字節碼文件,并且在JVM中將它們轉換成類。

類加載器(除了bootstrap類加載器)有父類加載器,這些父類是基本加載器的加載器實例。最重要的一點是設置正確的父加載器。然后可以使用 類加載器的getParent()方法實現委派類請求(例如:自定義類加載器找不到使用專門方法的類時)。此時必須為將父加載器作為 java.lang.ClassLoader構造器的參數:

public class MyClassLoader extends ClassLoader{ public MyClassLoader() { super(MyClassLoader.class.getClassLoader()); } }

?本人有java編程開發學習資料,有需要的免費分享給大家,加我微信:tangniu520666,備注“4”,每個人都是需要不斷學習成長的,我給你這么好的東西,課千萬不要浪費哦。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容