黑马程序员技术交流社区

标题: 关于类加载器 [打印本页]

作者: 贾振凯    时间: 2013-2-27 21:03
标题: 关于类加载器
java的类加载器的父子关系为:根类加载器<-----扩展类加载器<-----系统类加载器<-----用户类加载器

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

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



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




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