ClassLoader未调用重写的findClass

来源:百度知道 编辑:UC知道 时间:2024/04/28 04:00:17
我自己定义了一个ClassLoader的子类,覆盖了父类的findClass方法,但是该程序运行时却没有调用覆盖的findClass方法,而是调用了父类的findClass方法,请问这是为什么?
class CryptoClassLoader extends ClassLoader{
protected Class findClass(String className) throws ClassNotFoundException
{
byte[] classBytes = null;
try
{
classBytes = loadClassBytes(className);
}
catch (IOException e)
{
}
Class cl = defineClass(className, classBytes, 0, classBytes.length);

return cl;
}
private byte[] loadClassBytes(String className) throws IOException{
FileInputStream in = new FileInputStream(new File(className+".class"));
try{
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int ch;
while ((ch = in.read()) != -1)
buffer.write(ch);
in.close();
return buffer.toByteArray();
}
}
public static void main(String[] args) throws Exception{

我看了下,它好像是这样工作的:
1.CryptoClassLoader loader;
2.loader.loadClass();//loadClass为父类的public Class<?> loadClass(String name)
3.在loadClass中,return loadClass(name, false);//loadClass为父类的protected synchronized Class<?> loadClass(String name, boolean resolve)
4.//若没找到类,则c = findClass(name);//findClass为自己的,这时当然会有打印消息了
5.//若找到了类,则直接返回了,也就没有调用自己的findClass方法了

双亲委托模式