为什么ClassLoader :: getResource不返回null,但Class :: getResource返回正确的值

时间:2016-11-04 21:45:35

标签: java class

我写了以下简单的程序:

public class Test {
    public static void main(String[] args) throws IOException {
        System.out.println(get(Test.class.getResource("/c.conf"))); //fine
        System.out.println(
               get(Test.class.getClassLoader().getResource("/c.conf"))
        ); //NPE, Test.class.getClassLoader().getResource("/c.conf") returns null
    }

    public static String get(URL url) throws IOException {
        InputStreamReader reader = new InputStreamReader(url.openStream());
        StringBuilder sb = new StringBuilder();
        int current;
        while ((current = reader.read()) != -1)
            sb.append((char) current);
        return sb.toString();
    }
}

所以,我查看Class::getResource(String)的{​​{3}}并发现了这个:

  

搜索与给定类关联的资源的规则是   由类的定义类加载器实现。

所以我认为这两种方法应该以相同的方式加载资源。

为什么Test.class.getClassLoader().getResource("/c.conf")抛出NullPointerExceptionTest.class.getResource("/c.conf")没有?

0 个答案:

没有答案