??//當前類的getResource等取得本地資源的方法是以當前類所在的文件夾為當前目錄,以bin目錄
??//也就是發布后的user.dir目錄為根目錄。
??//當前ClassLoader去本地資源是以bin目錄,或發布后的user.dir目錄為當前目錄。
??//而ClassLoader的根目錄恕我不知。
??//通過如下測試,可得出ClassLoader是沒有根目錄的。
//??URL ss = SoundPlayTest.class.getClassLoader().getResource("");
//??System.out.println(ss.getPath());
??//我想Eclipse沒有使用系統的ClassPath,它的ClassPath是在工程的.classpath文件中定義的。而且我想eclipse是使用的自己的ClassLoader的。
ClassLoader的機制:
Bootstrap ClassLoader/啟動類加載器
主要負責jdk_home/lib目錄下的核心 api 或 -Xbootclasspath 選項指定的jar包裝入工作。
Extension ClassLoader/擴展類加載器
主要負責jdk_home/lib/ext目錄下的jar包或 -Djava.ext.dirs 指定目錄下的jar包裝入工作。
System ClassLoader/系統類加載器
主要負責java -classpath/-Djava.class.path所指的目錄下的類與jar包裝入工作。
User Custom ClassLoader/用戶自定義類加載器(java.lang.ClassLoader的子類)
在程序運行期間, 通過java.lang.ClassLoader的子類動態加載class文件, 體現java動態實時類裝入特性。
??//getResourceAsStream和ClassLoader.getSystemResourceAsStream的關系
??//首先getResourceAsStream調用自己的ClassLoader加載,如果沒有就是用ClassLoader.getSystemResourceAsStream
??//來加載資源。getSystemResourceAsStream從當前ClassLoader的類加載搜索路徑中查找資源。所以使用getResourceAsStream
??//也可以加載當前Classpath中的資源。
?