A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 姜胜凯 中级黑马   /  2014-1-22 15:57  /  1467 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 姜胜凯 于 2014-1-22 20:36 编辑

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

3 个回复

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

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

1358873029_4729.jpg
回复 使用道具 举报
darkpiece 发表于 2014-1-22 16:56
首先当前线程的类加载器去加载线程中的第一个类。
如果类A中引用了类B,Java虚拟机将使用加载类A的类装载器 ...

受教了。万分感谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马