getClass().getClassLoader()爲null

想獲取resources下的文件,之前用過this.getClass().getClassLoader().getResourceAsStream(path);可以獲取到,但最近的一個工程中需要在一個靜態方法中獲取該文件,沒有了this,我直接用了Class.class.getClassLoader().getResourceAsStream(path),結果發現返回爲null。


原因:

提到這裏不得不提一下jvm的類加載機制。自上而下加載,自下而上檢查。

最開始是由BootStrap ClassLoader加載rt.jar下的文件,也就是java最最核心的部分;然後由Extension ClassLoader加載ext下的文件;再有App ClassLoader加載用戶自己的文件。

由於BootStrap ClassLoader是用c++寫的,所以在返回該ClassLoader時會返回null。顯然,Class爲java.lang.Class,是rt.jar中的,由BootStrap ClassLoader加載,所以返回null。


解決方案:

用自己編寫的類的類名去獲取ClassLoader。

發佈了46 篇原創文章 · 獲贊 31 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章