ClassLoader().getResource (String path)
path为相对ClassPath的路径,从ClassPath根下获取,不能以“/”开头。
//ClassLoader 获取方式
//1.通过当前线程获取ClassLoader
ClassLoader classLoader1 = Thread.currentThread().getContextClassLoader();
//2.通过类获取ClassLoader
ClassLoader classLoader2 = ClassLoaderTest.class.getClassLoader();
Class.getResource(String path)
path不以"/"开头时,默认是从此类包下获取资源,即相对此类所在包的路径;
path以"/"开头时,则是从ClassPath根下获取
Class.getResource("/") == ClassLoader().getResource("")
原因: Class.getResource和ClassLoader.getResource本质上是一样的
Class.getResource可以使用("/"),使用了 resolveName 将 / 处理了
private String resolveName(String name) {
if (name == null) {
return name;
}
if (!name.startsWith("/")) {
Class<?> c = this;
while (c.isArray()) {
c = c.getComponentType();
}
String baseName = c.getName();
int index = baseName.lastIndexOf('.');
if (index != -1) {
name = baseName.substring(0, index).replace('.', '/')
+"/"+name;
}
} else {
name = name.substring(1);
}
return name;
}