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