欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JAVA 筆記 ClassLoader.getResourceAsStream() 與 Class.getResourceAsStream()的區(qū)別

 更新時間:2021年07月29日 09:09:20   作者:心笑峰  
這篇文章主要介紹了JAVA 筆記 ClassLoader.getResourceAsStream() 與 Class.getResourceAsStream()的區(qū)別,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

Class.getResourceAsStream() 會指定要加載的資源路徑與當前類所在包的路徑一致。

例如你寫了一個MyTest類在包com.test.mycode 下,那么MyTest.class.getResourceAsStream("name") 會在com.test.mycode包下查找相應的資源。

如果這個name是以 '/' 開頭的,那么就會從classpath的根路徑下開始查找。

ClassLoader.getResourceAsStream() 無論要查找的資源前面是否帶'/' 都會從classpath的根路徑下查找。

所以: MyTest.getClassLoader().getResourceAsStream("name") 和

MyTest.getClassLoader().getResourceAsStream("name") 的效果是一樣的。

順便提下JAVA中類的加載器:

一共有三種加載器

bootstrap classloader :負責加載JAVA核心類( jre 下lib和class目錄中的內容)
extension classloader :負責加載JAVA擴展類(jre 下lib/ext 目錄中的內容)
system classloader :負責加載應用指定的類 (環(huán)境變量classpath中配置的內容)

一個類的加載順序也是按上面的排列來的,這樣就能保證系統(tǒng)的類能先加載。

與此同時用戶也可以自己定義ClassLoader,用來加載特殊的資源。

這里就涉及到 Class.getClassLoader() 和 Thread.currentThread.getContextClassLoader()的區(qū)別。

舉一個簡單的例子:

假如某天JAVA給我們提供了一個叫 StartCamera 的類用來啟動電腦的標準攝像頭,并將這個類打包在一個jar中。

正常情況下,我們要啟動攝像頭時只需將這個jar配置到classpath中。系統(tǒng)啟動時system classloader會將這個類加載到應用中。

但因為攝像頭的生產廠家不一樣,針對新的設備會有多個不同的StartCamera實現(xiàn),在應用中我們不知道實際的用戶會用到哪種。于是我們就自定義了一個ClassLoader,用來針對具體的設備類型加載相應的StartCamera類。

這樣一來就出現(xiàn):優(yōu)先加載我們定義的類,加載不到的情況下再加載系統(tǒng)的。 這樣的需求,是系統(tǒng)默認的父委托加載機制無法滿足的。

Thread.currentThread.getContextClassLoader() 就是這樣產生的。 我們使用Thread.currentThread.setContextClassLoader() 可以為當前線程指定相應的ClassLoader,然后用get的方式來獲取。

那么上面的加載代碼就可能是這樣子的:

publicvoiduseCamera(){
StartCameras=this.findClassLoader().loadClass("StartCamera");

s.start();
}


privateClassLoaderfindClassLoader(){
ClassLoaderloader=Thread.currentThread().getContextClassLoader();
if(loader==null){
loader=ClassLoader.getSystemClassLoader();
}

returnloader;
}

到此這篇關于JAVA 筆記 ClassLoader.getResourceAsStream() 與 Class.getResourceAsStream()的區(qū)別的文章就介紹到這了,更多相關java ClassLoader.getResourceAsStream() 與 Class.getResourceAsStream()區(qū)別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • idea中如何連接hive

    idea中如何連接hive

    這篇文章主要介紹了idea中如何連接hive問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • 深入理解java中的重載和覆蓋

    深入理解java中的重載和覆蓋

    下面小編就為大家?guī)硪黄钊肜斫鈐ava中的重載和覆蓋。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-06-06
  • Java中常用的設計模式之單例模式詳解

    Java中常用的設計模式之單例模式詳解

    這篇文章主要為大家詳細介紹了Java中常用的設計模式之單例模式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Flink狀態(tài)和容錯源碼解析

    Flink狀態(tài)和容錯源碼解析

    這篇文章主要為大家介紹了Flink狀態(tài)和容錯源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • 解決javaBean規(guī)范導致json傳參首字母大寫將永遠獲取不到問題

    解決javaBean規(guī)范導致json傳參首字母大寫將永遠獲取不到問題

    這篇文章主要介紹了解決javaBean規(guī)范導致json傳參首字母大寫將永遠獲取不到問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • maven加入spring框架的詳細教程

    maven加入spring框架的詳細教程

    這篇文章主要介紹了maven加入spring框架的詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Spring中的StopWatch記錄操作時間代碼實例

    Spring中的StopWatch記錄操作時間代碼實例

    這篇文章主要介紹了Spring中的StopWatch記錄操作時間代碼實例,spring-framework提供的一個StopWatch類可以做類似任務執(zhí)行時間控制,也就是封裝了一個對開始時間,結束時間記錄操作的Java類,需要的朋友可以參考下
    2023-11-11
  • 詳解elasticsearch之metric聚合實現(xiàn)示例

    詳解elasticsearch之metric聚合實現(xiàn)示例

    這篇文章主要為大家介紹了elasticsearch之metric聚合實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 新的Java訪問mysql數(shù)據(jù)庫工具類的操作代碼

    新的Java訪問mysql數(shù)據(jù)庫工具類的操作代碼

    本文通過實例代碼給大家介紹新的Java訪問mysql數(shù)據(jù)庫工具類的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-12-12
  • Ubuntu 16.04 安裝 java 8的方法

    Ubuntu 16.04 安裝 java 8的方法

    這篇文章主要介紹了Ubuntu 16.04 安裝 java 8的方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05

最新評論