Java常用获取类加载器的三种方式和区别

一、获取类加载器的三种方式

//获取当前类的加载器
ClassLoader classLoader = Test.class.getClassLoader();
//获取当前线程上下文类加载器
ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
//获取系统类加载器
ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();

二、3种方式的区别

  1. **getClassLoader()**是获取加载当前类的类加载器,可能是"启动类加载器"、“拓展类加载器”、"系统类加载器"等,取决于当前类是由哪个加载器加载的;

    //输出null,代表启动类加载器
    String.class.getClassLoader();
    
    //java se环境下输出:AppClassLoader---系统类加载器
    //java ee + tomcate 环境下输出:WebappClassLoader---自定义类加载器,是系统类加载器的子加载器
    UnionWxMaComponent.class.getClassLoader();
    
  2. **getContextClassLoader()**是获取当前线程上下文的类加载器,用户可以自己设置,java se环境下一般是AppClassLoaderjava ee环境下一般是WebappClassLoader

    //java se环境下输出:AppClassLoader---系统类加载器
    //java ee + tomcate 环境下输出:WebappClassLoader---自定义类加载器,是系统类加载器的子加载器
    Thread.currentThread().getContextClassLoader();
    
    //获取到扩展类加载器,并设置到线程上下文中,再获取线程上下文类加载器就是扩展类加载器了
    ClassLoader classLoader = ClassLoader.getSystemClassLoader().getParent();
    Thread.currentThread().setContextClassLoader(classLoader);
    
  3. **getSystemClassLoader()**是获取系统类加载器—AppClassLoader

    //输出AppClassLoader---系统类加载器
    ClassLoader.getSystemClassLoader();
    
  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值