我理解Class和ClassLoader中这些方法之间的差异。
注意:我不是在问Class.getResource()和ClassLoader.getResource()之间的差别,因为我明白了。我关注的是ClassLoader.getResource()不适用于以前导斜杠开头的资源名称
答案 0 :(得分:1)
我关注
ClassLoader.getResource()
对于以前导斜杠开头的资源名称不起作用
那是因为没有以前导斜杠开头的资源名称。根据定义,资源名称是“a'/' - 标识资源的分隔路径名” - 组件用斜杠分隔,而不是以开头。
someClass.getResource("/pkg/readme.txt")
相当于someClass.getClassLoader().getResource("pkg/readme.txt")
,前导斜杠不是资源名称的一部分,而是指示Class.getResource
它应该不将类的包添加到它传递给类加载器的路径中。没有领先的斜杠:
someClass.getResource("pkg/readme.txt")
等同于
someClass.getClassLoader().getResource("com/example/pkg/readme.txt")
(假设someClass
包含在com.example
)
答案 1 :(得分:1)
Class的getResource() - 文档说明了区别:
这个方法在调用之后将调用委托给它的类加载器 更改资源名称:如果资源名称以“/”开头,则为 没有变化;否则,包名称将预先添加到资源中 转换后的名称“。”至 ”/”。如果这个对象是由 bootstrap loader,将调用委托给 ClassLoader.getSystemResource。
What is the difference between Class.getResource() and ClassLoader.getResource()?