Class.getResource()与ClassLoader.getResource()区别

场景:在src/test/resources目录放了一个数据文件”data.txt”,使用TestData.class.getResource(“data.txt”)返回null,找不到该数据文件。但使用TestData.class.getClassLoader().getResource(“data.txt”)却能找到该文件。

不明觉历!
看下Class.getResource()源码吧

public java.net.URL getResource(String name) {
name = resolveName(name);
ClassLoader cl = getClassLoader0();
if (cl==null) {
// A system class.
return ClassLoader.getSystemResource(name);
}
return cl.getResource(name);
}

Class.getResource()最终也是调用的ClassLoader.getResource()。只不过对入参name做了处理。

/**
* Add a package name prefix if the name is not absolute Remove leading “/”
* if name is absolute
*/
private String resolveName(String name) {
if (name == null) {
return name;
}
if (!name.startsWith(“/”)) {
Class

你可能感兴趣的:(java-web,java,Resource)