博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Class.getResource和ClassLoader.getResource的区别分析
阅读量:5148 次
发布时间:2019-06-13

本文共 2050 字,大约阅读时间需要 6 分钟。

在Java中获取资源的时候,经常用到Class.getResource和ClassLoader.getResource,本文给大家说一下这两者方法在获取资源文件的路径差异。

Class.getResource(String path)
path不以'/'开头时,默认是从此类所在的包下取资源;path以'/'开头时,则是从项目的ClassPath根下获取资源。在这里'/'表示ClassPath
JDK设置这样的规则,是很好理解的,path不以'/'开头时,我们就能获取与当前类所在的路径相同的资源文件,而以'/'开头时可以获取ClassPath根下任意路径的资源。
如下所示的例子:

运行结果为:

file:/D:/work_space/java/bin/net/swiftlet/
file:/D:/work_space/java/bin/

Class.getClassLoader().getResource(String path)

path不能以'/'开头时,path是指类加载器的加载范围,在资源加载的过程中,使用的逐级向上委托的形式加载的,'/'表示Boot ClassLoader中的加载范围,因为这个类加载器是C++实现的,所以加载范围为null。如下所示:

运行结果为:

file:/D:/work_space/java/bin/
null
从上面可以看出:
class.getResource("/") == class.getClassLoader().getResource("")
其实,Class.getResource和ClassLoader.getResource本质上是一样的,都是使用ClassLoader.getResource加载资源的。下面请看一下jdk的Class源码:

从上面就可以看才出来:Class.getResource和ClassLoader.getResource本质上是一样的。至于为什么Class.getResource(String path)中path可以'/'开头,是因为在name = resolveName(name);进行了处理:

转载于:https://www.cnblogs.com/yogalin/p/7754109.html

你可能感兴趣的文章
电子书下载:Professional ASP.NET Design Patterns
查看>>
random 产生一个随机数的方法
查看>>
RST_n的问题
查看>>
欢迎来我的#百度相册#时光轴,坐上时光机,与我一起穿梭时空!
查看>>
------结对作业代码复审-----
查看>>
ASP.NET 获得当前网页名字
查看>>
windows pear 安装
查看>>
22Spring基于配置文件的方式配置AOP
查看>>
H5页面在微信端的分享
查看>>
python13 1.函数的嵌套定义 2.global、nonlocal关键字 3.闭包及闭包的运用场景 4.装饰器...
查看>>
例6-5
查看>>
eclipse变量名自动补全
查看>>
一个数据库操作类(包含弹出对话框函数,也可自定义弹出的脚本内容)
查看>>
HIVE文件
查看>>
转——调试寄存器 原理与使用:DR0-DR7
查看>>
C# MP3文件属性读取
查看>>
团队冲刺06
查看>>
java字节流复制文件
查看>>
重载和覆盖
查看>>
实验二 进程调度预备
查看>>