classloader的一点积累

   Class.forName(String className);今天在用这方法loader一class时,出现了AddCommand class not found的错误,刚开始以为是clasName 写错了,仔细检查后发现并不是这问题。打开jdk文档,看到className - the fully qualified name of the desired class.及例子中的 Class t = Class.forName("java.lang.Thread")
才恍然大悟,我们传进去的应该是完整的name(包括包路径)。

  jdk上有这么一句话:Invoking this method is equivalent to: Class.forName(className, true, currentLoader),     where currentLoader denotes the defining class loader of the current class.就是说前者最后调用的还是后者,只不过是自动将后两个参数设成了default value. currentLoader 可以通过 this.getClass().getClassLoader()来获得。但这方法有可能返回null, 为什么呢? 这就涉及到类加载体系问题,如果这class由bootstrap loader, 返回的就是null. 那是不是说得到null,再往下调用就会出错,抛出exception呢?参看JDK文档,上面如下说明:If the loader is null, and a security manager is present, and the caller's class loader is not null,this method calls the security manager's checkPermission method with a RuntimePermission("getClassLoader") permission to ensure it's ok to access the bootstrap class loader.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值