本帖最后由 胡智 于 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);//???
}
|