//当前类的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中的资源。