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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贾振凯 中级黑马   /  2013-2-27 21:03  /  1462 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java的类加载器的父子关系为:根类加载器<-----扩展类加载器<-----系统类加载器<-----用户类加载器

张老师的基础加强篇2里有这么个总结:当所有祖宗类没有加载到类,就会回到发起者类加载器。
在这里我对发起者类加载器的判断有些模糊?

比如以用户自定义类UserClass1为发起类,那么根据类加载器的父类委托机制可知加载过程为:扩展类加载器先作用,若加载失败则由根类加载器加载,若还是失败则由系统类加载器加载。。。。。。 在这个过程中是不是谁先加载成功谁就是发起者类加载器啊?


2 个回复

正序浏览
这个问题吧,不好解释。那我还是啰嗦几句吧,希望对你有所帮助
类加载器的代理模式中提到过类加载器会首先代理给其它类加载器来尝试加载某个类。这就意味着真正完成类的加载工作的类加载器和启动这个加载过程的类加载器,有可能不是同一个。真正完成类的加载工作是通过调用 defineClass来实现的;而启动类的加载过程是通过调用 loadClass来实现的。前者称为一个类的定义加载器(defining loader),后者称为初始加载器(initiating loader)。在 Java 虚拟机判断两个类是否相同的时候,使用的是类的定义加载器。也就是说,哪个类加载器启动类的加载过程并不重要,重要的是最终定义这个类的加载器。两种类加载器的关联之处在于:一个类的定义加载器是它引用的其它类的初始加载器。如类 com.example.Outer引用了类 com.example.Inner,则由类 com.example.Outer的定义加载器负责启动类 com.example.Inner的加载过程。
回复 使用道具 举报
呃。。。。。。。这个问题问的真扯淡!见笑啦见笑啦!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马