关闭

classloader的一点积累

526人阅读 评论(0) 收藏 举报

   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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:31783次
    • 积分:541
    • 等级:
    • 排名:千里之外
    • 原创:23篇
    • 转载:6篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论