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 :负责加载应用指定的类 (环境变量classpath中配置的内容)
一个类的加载顺序也是按上面的排列来的,这样就能保证系统的类能先加载。
与此同时用户也可以自己定义ClassLoader,用来加载特殊的资源。