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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 胡智 中级黑马   /  2013-8-21 11:45  /  1342 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 胡智 于 2013-8-30 17:52 编辑

最近貌似问问题的少了很多,是大家都忙着报名考试吗?
类加载器的委托机制是让顶层父类先找,找不到再逐级让下级子类找,直到返回给发起者。如果父类找到了子类就不用找,如果都找不到就报异常。


可是eclipse生成的findClass方法的最后面有一行return super.findClass(name)那岂不是先让子类找,子类找不到文件,就让父类找。这样顺序就反了。
protected Class<?> findClass(String name)  {
                String classFileName = classDir + "\\"+name+".class";
                FileInputStream fis;
                try {
                        //查找目标文件
                        fis = new FileInputStream(classFileName);
                        ByteArrayOutputStream bos = new ByteArrayOutputStream();
                        //加密找到的文件
                        cypher(fis,bos);
                        fis.close();
                        byte[] bytes = bos.toByteArray();
                        //返回生成的class文件
                        return defineClass(bytes,0,bytes.length);
                } catch (Exception e) {
                        e.printStackTrace();
                }
                return super.findClass(name);//???

}

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

4 个回复

倒序浏览
super不是代表父类吗?应该是让父类找啊,是不是你理解错了
回复 使用道具 举报
坚持远方 发表于 2013-8-21 14:06
super不是代表父类吗?应该是让父类找啊,是不是你理解错了

委托机制不是先让顶层父类找,父类找到了子类就不用找,没找到才让其子类找。是从上到下的找法。现在的程序是子类的方法先找,如果加载到了,就 return defineClass(bytes,0,bytes.length);
没有加载到的话就return super.findClass(name);让父类找。这样不就是从下往上的顺序找了。

回复 使用道具 举报
{:soso_e176:}
亲,请问下问题是否解决?
如果已解决请及时将未解决改为已解决
如果未解决请回帖追问
三天未回复的将视为已解决
详情参考:如何更改分类

保持队形,谢谢合作
{:soso_e181:}
回复 使用道具 举报
胡智 发表于 2013-8-21 17:49
委托机制不是先让顶层父类找,父类找到了子类就不用找,没找到才让其子类找。是从上到下的找法。现在的程 ...

其实类加载器就是先从上到上,再从上到下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马