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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lucy198921 中级黑马   /  2013-3-25 21:58  /  1406 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 lucy198921 于 2013-3-27 12:14 编辑

看老师视频里讲抽象类ClassLoader里的loadClass方法和findClass方法,也就是类加载器的原理听听不是很懂。

高手给讲讲.
________________________________________________________________________

类加载器的原理,自己查了些文档,看是否是这么回事?

1.派当前线程的类加载器加载class文件,首先该类用方法:class findclass(String str);
   看该类是否已经加载,如果加载了,返回加载过的class。没有呢,返回null。
2.如果返回null,需要加载,他就把这个任务给自己的父类,父类给父类,一直到bootStrap。
父类加载器去加载,此时判断自己的管辖范围,如果不属于自己的管辖范围,父类不加载,返回null。
3.父类又把任务交给子类,这样一直给到最开始加载类的加载器,他再加载,如果他也加载不了,返回错误。
4.如果加载了返回Class文件。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

3 个回复

倒序浏览
差不多就是这个意思,和程序执行一样,一步一步的走。
回复 使用道具 举报
看老师视频里讲抽象类ClassLoader里的loadClass方法和findClass方法,也就是类加载器的原理听听不是很懂。
好像子类并不先找,而是直接委托父类,父类再委托父类,一直到bootStrap,其实是bootStrap,最先开始找的;并不是子类自己先找,找不到再委托父类找
当自定义的类加载器如果是调用loadClass(className)方法会委托类父去找,如所有父都找不到,最终会退给发起者,也是说父类让子类调用findClass方法
如果自定义类加载器直接调用findClass(className),不再会委托其父类去找,而是自己直接找
另外:AppClassLoader以上的父类好像只找其对应目录且带完整包名的类(二进制名称,没有.class),如果自定义的只写类名.class就可以了,l 致于为什么我也不知道,只是测试出来的

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
还有问题继续追问;没有的话,记得将帖子分类改成【已解决】~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马