java 根据类路径获取类_Java类加载器
生活随笔
收集整理的這篇文章主要介紹了
java 根据类路径获取类_Java类加载器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
類加載器
Java程序可以通過類加載器來達到通過一個類的全限定類名來獲取該類的二進制字節流。
類與類加載器
對于任意一個類,都必須由加載它的類加載器和這個類本身一起共同確立其在Java虛擬機中的唯一性,每一個類加載器都擁有一個獨立的類名稱空間。即時這兩個類
雙親委派模型
三層類加載器:
- 啟動類加載器(Bootstrap Class Loader):負責加載\lib目錄下面或者-Xbootclasspath參數指定的路徑下存放的類庫。啟動類加載器無法被Java程序直接引用。
- 擴展類加載器(Extension Class Loader):擴展Java SE功能的類庫可以放在ext目錄下面,由該加載器加載。這種加載器被模塊化系統取代,開發者可以直接使用擴展類加載器加載Class文件
- 應用程序類加載器(Application Class Loader):用來加載用戶類路徑下面的所有類庫,如果應用程序中沒有自定義過自己的類加載器,這個就是程序中默認的類加載器。
除此之外,用戶還可以自定義類加載器來實現特定功能
雙親委派模型要求除了頂層啟動類加載器以外,所有類加載器都應有自己的父類加載器。
雙親委派模型的工作流程:如果一個類加載器受到了類加載請求,它首先不會自己去嘗試加載這個類,而是把這個請求委派給父類加載去完成。
這個模型保證了一些底層類如Object是被同一個類加載器——啟動類加載器加載的,避免出現多個重名但是被虛擬機認為不同類的情況的出現。保證了Java虛擬機的穩定運行。
破壞雙親委派模型
當一些標準服務類(由啟動類加載器加載)需要調用用戶代碼的時候,啟動類加載器是無法得知這些應用程序中的接口代碼的,這時只能通過線程上下文類加載器來由上層逆向調用下層的代碼。這個類加載器可以通過java.lang.Thread類的setContextClassLoader()方法進行設置,如果線程還未設置,他將會從父線程中繼承一個,如果在應用程序的全局范圍內都沒有設置過的話,那這個類加載器默認的是應用程序類加載器。
后來在OSGI的環境下面,類加載器不再使用雙親委派模型,而是更加復雜的網狀結構
總結
以上是生活随笔為你收集整理的java 根据类路径获取类_Java类加载器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android css 字体,如何定义移
- 下一篇: java美元兑换,(Java实现) 美元