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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 马志军 于 2013-1-3 08:49 编辑

覆盖了findClass方法,自己去加载了。如果找不到,说是调用父类的findClass方法,让父类去加载?那么此时的父类加载器它是不是先去找自己父类,是不是又使用委托机制了?

评分

参与人数 1技术分 +1 收起 理由
崔政 + 1 我有点晕。

查看全部评分

5 个回复

倒序浏览
跟帖学习
回复 使用道具 举报
本帖最后由 翁鹏 于 2013-1-1 22:59 编辑

在java虚拟机中有一个叫 启动类加载器(Bootstrap ClassLoader)的东西, 它是双亲委托模型的顶层加载器,它没有父类加载器,它是根。其余的加载器都有父类加载器的。

双亲
委托模型的一般工作过程:一个类加载器收到了类加载的请求,它不会先自己去尝试加载这个类,而是把请求委派给父类加载器,一层一层都是如此, 最终所有请求都会到达顶层启动类加载器,只有当父类加载器反馈自己无法完成这个加载请求,子类加载器才会自己去尝试加载。

这只是一个模型概念,具体实现的时候应该有各方面的优化,可能有点复杂的,但我们不是虚拟机的实现团队,不用管了。


还有就是双亲委派模型只能解决一部分需求,还有一些需求要用其他的类加载器模型实现。


还有一点就是类加载器之间的父子关系不是用继承来实现的,用的是组合关系来实现的。

点评

具体原理我也知道,但好像还是没有回答我的问题。  发表于 2013-1-2 09:28
回复 使用道具 举报
嗯,会的,都是会先交给自己的父类加载器去加载,
当父类加载器反馈自己无法完成这个加载请求,子类加载器才会自己去尝试加载。

不过话说回来,覆盖了findClass方法,一般都会找到的~
回复 使用道具 举报
冉世友 发表于 2013-1-1 23:08
嗯,会的,都是会先交给自己的父类加载器去加载,
当父类加载器反馈自己无法完成这个加载请求,子类加载器 ...

如果都给父类,能找到,那么自己定义的不就用不到了?跟没定义一样
回复 使用道具 举报
马志军 发表于 2013-1-2 09:29
如果都给父类,能找到,那么自己定义的不就用不到了?跟没定义一样

有些类内容不是被加密了,父类加载了也没用啊

还有就是自定义的加载器有个自己指定的加载位置,只要跟父类不一样,
父类肯定找不到的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马