黑马程序员技术交流社区
标题: 委托什么时候发生。 [打印本页]
作者: 工善器 时间: 2014-1-19 09:10
标题: 委托什么时候发生。
委托什么时候发生,一定会发生么??
如何理解下面的几句话?
1.当前线程的类加载器(上下文加载器)首先去加载线程中的第一个类。
一旦这个加载器加载了第一个类,第一个类a又引用了第二个类b。
2. 如果类A中引用了类B,Java虚拟机将使用加载类A的类装载器来加载类B。
3. 还可以直接调用ClassLoader.loadClass()方法来指定某个类加载器去加载某个类。
作者: DOOR 时间: 2014-1-19 09:26
本帖最后由 DOOR 于 2014-1-19 09:28 编辑
每个Java自带的类加载器加载类时,首先就会委托给上级类加载器了。你可以理解为必须,因为这就是委托机制。你可以靠自定义类加载器的方式打破这种机制。
默认流程先由发起者类加载器将类一级级委托到顶级类加载器BootStra开始找,找到了直接返回,没找到再返回给其子级找,还没找到再一级级往下返直到发起者,发起者也没找到就报异常。
委托机制的优点就是:可以集中管理,不会产生过多字节码重复。
作者: 工善器 时间: 2014-1-19 09:46
为什么要自定义类加载器,是加载特定目录的需要么?
作者: DOOR 时间: 2014-1-19 10:05
有一道面试,能不能自己写个类叫java.lang.System?答案:通常不可以,原因如下:
为了不让我们写System类,类加载采用委托机制,这样可以保证爸爸们优先,
也就是总是使用爸爸们找到的类,这样总是使用java系统提供的System。
但是可以避开委托机制,自己写一个类加载器去加载自己写的这个System类。
你可以重新定义所有Java final类,怎么样,很酷吧
作者: 高丽华 时间: 2014-1-19 10:32
能不能在表达的清楚点!就是问什么要自定义类加载器的这个问题!谢谢了:)
作者: DOOR 时间: 2014-1-19 11:00
类加载器是属于Java虚拟机的,还有高新里面的很多技术都是在为以后的框架做准备,
目前所学只要把机制理解了,具体应用到后面就来了,不要着急
比如你学吉他的时候,揉弦,推弦,点弦N多技术,刚开始就是单练,
到后期搞高难度的solo的时候就可以把这些技术对号入座融合运用,
如果你仅仅急于想知道,类加载器,建议你看看Bill Venners的 《深入Java虚拟机》
我也是初学者,上面都是基于个人的一些理解,希望能帮到你。
作者: 工善器 时间: 2014-1-19 12:45
不搞笑,因为这个我总结过,不是这个意思,二楼的意思接近。恩谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |