学习Class.getResource()、ClassLoader.getResource()和this.class.getClassLoader()

       在学习java的一段时间内,一直碰到Class.getResource()、ClassLoader.getResource()和this.class.getClassLoader()这三个方法。用到之后,百度一下,明白了什么意思了,但是过了一段时间之后,又忘了。今天就把它记录下来吧!!

    java是面向对象语言,面向对象的语言的宗旨就是万事万物皆对象,那么类、类里面的属性和方法都是对象。java里面的所有的类都是Class类的对象,this.class是获得这个类相对于Class类的对象。

    getClassLoader()是获得这个类对象的加载器。只有Class类才有getClassLoader()方法;java设计Class这个类,用于虚拟机对类的管理。当一个类被虚拟机装载完毕的时候,就会创建一个Class类的实例,对于类A就是A.class,对于类B就是B.class。 Class类也提供了许多方法来获取类的信息。要知道,类的装载器分为 "启动类装载器 "、"用户定义装载器 "。它不止一种,Class类需要保存这些信息,getClassLoader()是用来获取这个信息的。

    Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题。

如下图在包testClass下创建一个text.xml文件。读取其位置


public class testMain
{
	public static void main(String[] args)
	{
		// 当前类(class)所在的包目录  
        System.out.println(testMain.class.getResource(""));  
        // class path根目录  
        System.out.println(testMain.class.getResource("/"));
        System.out.println(testMain.class.getResource("text.xml")); 
        System.out.println("++++++++++++++++++++++++++++");
        System.out.println(testMain.class.getClassLoader());
        System.out.println(testMain.class.getClassLoader().getResource(""));
        System.out.println(testMain.class.getClassLoader().getResource("/"));
        System.out.println(testMain.class.getClassLoader().getResource("text.xml"));
	}
}

其运行结果如下图:


有结果可以看出来:testMain.class.getClassLoader()获得是一个对象,testMain.class.getResource("/")和testMain.class.getClassLoader().getResource("")获得是testMain.class所在的目录,如下图所示:

    

使用Class.getClassLoader().getResourse(String path)该怎么实现呢?

public static void main(String[] args)
	{
		// 当前类(class)所在的包目录  
        System.out.println(testMain.class.getResource(""));  
        // class path根目录  
        System.out.println(testMain.class.getResource("/"));
        System.out.println(testMain.class.getResource("text.xml")); 
        System.out.println("++++++++++++++++++++++++++++");
        System.out.println(testMain.class.getClassLoader());
        System.out.println(testMain.class.getClassLoader().getResource(""));
        System.out.println(testMain.class.getClassLoader().getResource("/"));
        System.out.println(testMain.class.getClassLoader().getResource("text.xml"));
        testMain t = new testMain(); 
        System.out.println(t.getClass().getClassLoader().getResource(""));
        System.out.println(t.getClass().getClassLoader().getResource("text3.xml"));
        System.out.println(t.getClass().getClassLoader().getResource("testClass/text.xml"));
        System.out.println(t.getClass().getClassLoader().getResource("basick/text2.xml"));
}

运行结果:

    

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值