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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

在写类加载器时,继承findClass比loadClass更优越,优越在哪?

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

3 个回复

正序浏览
黑马网友  发表于 2011-9-29 15:35:19
板凳
findClass
protected Class<?> findClass(String name)
                      throws ClassNotFoundException使用指定的二进制名称查找类。此方法应该被类加载器的实现重写,该实现按照委托模型来加载类。在通过父类加载器检查所请求的类后,此方法将被 loadClass 方法调用。默认实现抛出一个 ClassNotFoundException。


参数:
name - 类的二进制名称
返回:
得到的 Class 对象
抛出:
ClassNotFoundException - 如果无法找到类



loadClass
public Class<?> loadClass(String name)
                   throws ClassNotFoundException使用指定的二进制名称来加载类。此方法使用与 loadClass(String, boolean) 方法相同的方式搜索类。Java 虚拟机调用它来分析类引用。调用此方法等效于调用 loadClass(name, false)。


参数:
name - 类的二进制名称
返回:
得到的 Class 对象
抛出:
ClassNotFoundException - 如果没有找到类
回复 使用道具 举报
loadClass方法的默认实现将按以下顺序搜索类
调用 findLoadedClass(String) 来检查是否已经加载类。
在父类加载器上调用 loadClass 方法。如果父类加载器为 null,则使用虚拟机的内置类加载器。
调用 findClass(String) 方法查找类。
如果使用上述步骤找到类,并且 resolve 标志为真,则此方法将在得到的 Class 对象上调用 resolveClass(Class) 方法。
鼓励用 ClassLoader 的子类重写 findClass(String),而不是使用此方法。

文档上这样写的,希望对你在帮助。

在loadClass内部就会调用findClass方法
[ 本帖最后由 曾公亮 于 2011-09-29  09:01 编辑 ]

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-29 08:48:16
沙发
应该不是继承的吧,应该覆盖的吧
loadClass方法有到父类找类的实现(委托机制)
如果你覆盖它,如果还想保留类加载器的委托机制的话,就需要自己写代码实现
如果覆盖的是findClass,程序就继承父类的loadClass(即保留了委托机制)
ps:loadClass内部会调用findClass
写得有点拗口
详情参看高新技术视频     45_自定义类加载器的编写原理分析.avi

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

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