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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 工善器 高级黑马   /  2014-1-19 09:10  /  1118 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

委托什么时候发生,一定会发生么??
如何理解下面的几句话?
1.当前线程的类加载器(上下文加载器)首先去加载线程中的第一个类。
一旦这个加载器加载了第一个类,第一个类a又引用了第二个类b。
2. 如果类A中引用了类B,Java虚拟机将使用加载类A的类装载器来加载类B。
3. 还可以直接调用ClassLoader.loadClass()方法来指定某个类加载器去加载某个类。


6 个回复

倒序浏览
本帖最后由 DOOR 于 2014-1-19 09:28 编辑

每个Java自带的类加载器加载类时,首先就会委托给上级类加载器了。你可以理解为必须,因为这就是委托机制。你可以靠自定义类加载器的方式打破这种机制。
默认流程先由发起者类加载器将类一级级委托到顶级类加载器BootStra开始找,找到了直接返回,没找到再返回给其子级找,还没找到再一级级往下返直到发起者,发起者也没找到就报异常。
委托机制的优点就是:可以集中管理,不会产生过多字节码重复。
回复 使用道具 举报
DOOR 发表于 2014-1-19 09:26
每个Java自带的类加载器加载类时,首先就会委托给上级类加载器了。你可以理解为必须,因为这就是委托机制。 ...

为什么要自定义类加载器,是加载特定目录的需要么?
回复 使用道具 举报
有一道面试,能不能自己写个类叫java.lang.System?答案:通常不可以,原因如下:
为了不让我们写System类,类加载采用委托机制,这样可以保证爸爸们优先,
也就是总是使用爸爸们找到的类,这样总是使用java系统提供的System。
但是可以避开委托机制,自己写一个类加载器去加载自己写的这个System类。
你可以重新定义所有Java final类,怎么样,很酷吧
回复 使用道具 举报
DOOR 发表于 2014-1-19 10:05
有一道面试,能不能自己写个类叫java.lang.System?答案:通常不可以,原因如下:
为了不让我们写System类 ...

能不能在表达的清楚点!就是问什么要自定义类加载器的这个问题!谢谢了:)
回复 使用道具 举报
高丽华 发表于 2014-1-19 10:32
能不能在表达的清楚点!就是问什么要自定义类加载器的这个问题!谢谢了 ...

类加载器是属于Java虚拟机的,还有高新里面的很多技术都是在为以后的框架做准备,
目前所学只要把机制理解了,具体应用到后面就来了,不要着急
比如你学吉他的时候,揉弦,推弦,点弦N多技术,刚开始就是单练,
到后期搞高难度的solo的时候就可以把这些技术对号入座融合运用,
如果你仅仅急于想知道,类加载器,建议你看看Bill Venners的 《深入Java虚拟机》
我也是初学者,上面都是基于个人的一些理解,希望能帮到你。
回复 使用道具 举报
DOOR 发表于 2014-1-19 10:05
有一道面试,能不能自己写个类叫java.lang.System?答案:通常不可以,原因如下:
为了不让我们写System类 ...

不搞笑,因为这个我总结过,不是这个意思,二楼的意思接近。恩谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马