黑马程序员技术交流社区

标题: 关于类加载器的解密问题。 [打印本页]

作者: 刘源    时间: 2012-8-15 12:03
标题: 关于类加载器的解密问题。
本帖最后由 刘源 于 2012-8-15 13:11 编辑

loadClass和findClass()之间是什么关系啊?
"问题已解决"
public class MyClassLoader extends ClassLoader{
protected Class<?> findClass(String name) throws ClassNotFoundException {}

然后在另一个类中调用:
Class<?> clazz  = new MyClassLoader()loadClass("ClassLoaderAttachment");
loadClass不是就是加载"ClassLoaderAttachment”这个类吗?
为什么这句话它会去调用MyClassLoader的findClass()这个方法。

作者: 周瑞    时间: 2012-8-15 12:09
Java 2 中 ClassLoader 的变动
1)loadClass 的缺省实现
   定制编写的 loadClass 方法一般尝试几种方式来装入所请求的类,如果您编写许多类,会发现一次次地在相同的、很复杂的方法上编写变量。 在 Java 1.2 中 loadClass 的实现嵌入了大多数查找类的一般方法,并使您通过覆盖 findClass 方法来定制它,在适当的时候 findClass 会调用 loadClass。 这种方式的好处是您可能不一定要覆盖 loadClass;只要覆盖 findClass 就行了,这减少了工作量。
2)新方法:findClass
     loadClass 的缺省实现调用这个新方法。findClass 的用途包含您的 ClassLoader 的所有特殊代码,而无需要复制其它代码(例如,当专门的方法失败时,调用系统 ClassLoader)。
作者: 李菁    时间: 2012-8-15 12:09
loadClass方法会首先调用 findLoadedClass方法来检查该类是否已经被加载过
如果没有加载过,会调用父类加载器的 loadClass方法尝试加载该类;
如果父类加载器无法加载该类的话,就调用 findClass方法来查找该类。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2