黑马程序员技术交流社区

标题: 关于类加载器的机制问题 [打印本页]

作者: 姜胜凯    时间: 2014-1-22 15:57
标题: 关于类加载器的机制问题
本帖最后由 姜胜凯 于 2014-1-22 20:36 编辑

最开始加载器的是哪个,加载我的类的又是哪个。他们之间都有什么区别?
求高手解答


作者: 浮出一个美    时间: 2014-1-22 16:43
defineClass:父类委托机制
findClass:自己编写的类加载器
具体你可以看张孝祥老师的相关视频
作者: darkpiece    时间: 2014-1-22 16:56
首先当前线程的类加载器去加载线程中的第一个类。
如果类A中引用了类B,Java虚拟机将使用加载类A的类装载器来加载类B。
还可以直接调用ClassLoader.loadClass()方法来指定某个类加载器去加载某个类。
每个类加载器加载类时,又先委托给其上级类加载器。
当所有祖宗类加载器没有加载到类,回到发起者类加载器,还加载不了,则抛ClassNotFoundException,不是再去找发起者类加载器的儿子,因为没有getChild方法,即使有,那有多个儿子,找哪一个呢?
对着类加载器的层次结构图和委托加载原理,解释先前将ClassLoaderTest输出成jre/lib/ext目录下的itcast.jar包中后,运行结果为ExtClassLoader的原因。希望可以帮到你。

1358873029_4729.jpg (126.6 KB, 下载次数: 28)

1358873029_4729.jpg

作者: 姜胜凯    时间: 2014-1-22 20:36
darkpiece 发表于 2014-1-22 16:56
首先当前线程的类加载器去加载线程中的第一个类。
如果类A中引用了类B,Java虚拟机将使用加载类A的类装载器 ...

受教了。万分感谢




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