Class和ClassLoader的getResourceAsStream的区别

一、共同点:

两个都可以用于从 classpath 里面进行资源读取。

 

二、不同点:资源的定义不同

1、Class用于相对于一个Object取资源。

2、ClassLoader相对于classpath取资源,用的是绝对路径。

3、路径的不同:

      3.1:在使用Class.getResourceAsStream 时, 资源路径有两种方式,

一种以 / 开头,则这样的路径是指定绝对路径,

一种不以 / 开头, 则路径是相对与这个class所在的包的。

     3.2:在使用ClassLoader.getResourceAsStream时, 路径直接使用相对于classpath的绝对路径。

 

三、实例说明:Tools.class.getClassLoader().getResourceAsStream(file);

      首先,Tools.class是获得对象当前的类类型,这部分数据存在方法区中,

      然后,在类类型上调用getClassLoader()方法是得到当前类型的类加载器,在Java中所有的类都是通过加载器加载到虚拟机中的,而且类加载器之间存在父子关系,就是子知道父,父不知道子,这样不同的子加载的类型之间是无法访问的(虽然它们都被放在方法区中),这样通过当前类的加载器来加载资源也就是保证是和类类型同一个加载器加载的。
     最后,调用了类加载器的getResourceAsStream()方法来加载文件资源。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值