黑马程序员技术交流社区

标题: 自定义类加载器的问题 [打印本页]

作者: 胡智    时间: 2013-8-21 11:45
标题: 自定义类加载器的问题
本帖最后由 胡智 于 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);//???

}

作者: 坚持远方    时间: 2013-8-21 14:06
super不是代表父类吗?应该是让父类找啊,是不是你理解错了
作者: 胡智    时间: 2013-8-21 17:49
坚持远方 发表于 2013-8-21 14:06
super不是代表父类吗?应该是让父类找啊,是不是你理解错了

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


作者: 以防万一    时间: 2013-8-30 00:21
{:soso_e176:}
亲,请问下问题是否解决?
如果已解决请及时将未解决改为已解决
如果未解决请回帖追问
三天未回复的将视为已解决
详情参考:如何更改分类

保持队形,谢谢合作
{:soso_e181:}

作者: 工善器    时间: 2014-1-16 18:31
胡智 发表于 2013-8-21 17:49
委托机制不是先让顶层父类找,父类找到了子类就不用找,没找到才让其子类找。是从上到下的找法。现在的程 ...

其实类加载器就是先从上到上,再从上到下。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2