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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 第一印象 中级黑马   /  2013-9-13 13:18  /  1327 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 第一印象 于 2013-9-16 13:50 编辑

既然除了BootStrap之外,ExtClassLoader、AppClassLoader、自定义的类加载器都是直接继承自ClassLoader的这个父类的,
那么除了BootStrap之外,其他的类加载器之间的关系应该是平级的,为什么会有子父类加载器一说呢?
比如说ExtClassLoader是AppClassLoader的父类加载器,AppClassLoader是自定义类加载器的父类加载器,
这个父类加载器是不是说,AppClassLoader本身是一个java类,这个类是由ExtClassLoader在findClass方法中加载进内存的,
自定义类加载器本身也是一个java类,它虽然负责加载一些别的java类,但是它自己也需要被加载,而加载它的正是AppClassLoader,
这样理解对吗?

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 很给力!

查看全部评分

3 个回复

倒序浏览
额 我记得Tomcat在编写的时候,它们的工程就自己又写了一个类加载器,但是它们的类加载器是继承AppClassLoader 的,这个在张老师的视频也有, 按类加载器的加载原理是父类若有则先加载,逐级加载的过程,如果我们自定义类加载器,它的加载是由AppClassLoader 直接加载的
http://www.ibm.com/developerworks/cn/java/j-lo-classloader/
有详尽的答案

评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 很给力!

查看全部评分

回复 使用道具 举报
亲,如问题已解决请将分类的“未解决”改为“已解决”。
以后的问题贴也要及时更改分类哦~
回复 使用道具 举报
zhou5852 发表于 2013-9-15 08:21
额 我记得Tomcat在编写的时候,它们的工程就自己又写了一个类加载器,但是它们的类加载器是继承AppClassLoade ...

是的,父类如果有的话应该是先加载父类的,但是上次我测试了一下,如果自己定义了一个类加载器,用自己的类加载器来加载一个字节码文件,在类路径下也放一份(因为类路径下的一般是用AppClassLoader来加载的),再打个jar放到java\jdk1.6\lib\ext下也放一份,结果是它并没有去用父类的加载器加载
这个类,而是直接用的我自己的类加载器,这是否说明自定义的类加载器不会去找父类呢?

需要说明的是:我的自定义类加载器只覆盖了findClass方法,并没有覆盖父类的loadClass(loadClass方法里面有找父类的流程代码,也就是先去找父类有没有这个类找到了就用父类的加载器加载)方法

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马