类加载问题

有几本书上在介绍类加载器的用户自定义类加载器时说覆盖loadClass方法,比如李刚的《疯狂java讲义》,实际上这种覆写loadClass方法的做法是不提倡甚至是错误的。


看看JDK源码就可知类加载器的类继承结构:抽象类ClassLoader<-----SecureClassLoader<----URLClassLoader,除了引导类加载器Bootstrap ClassLoader是底层本地方法用C++实现的以外,其他所有类加载器都是ClassLoader的后代。

不能覆写loadClass方法的原因:


第一,双亲委托机制不允许破坏loadClass方法。假如覆盖这个方法破坏了双亲委托机制,例如一个类A只是Object的子类,那么加载这个类时由于破坏了双亲委托机制,那么其父类Object的加载检查不能完成,何况类A自身的加载,那轮都轮不到。在加载Object等父类和其他核心类的时候就会提示找不到路径的异常或者错误。


第二,JDK源码中SecureClassLoader  URLClassLoader两个类都没有覆写抽象类ClassLoader的loadClass方法,JDK示例代码用户自定义类加载器要覆写的是findClass方法。


getInstance()方法,new ,反序列化是得到实例的几种方式,getInstance()方法是一个本地方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值