一、ClassLoader部分源码
读源码可知,ClassLoader里边loadClass的时候有一个findClass(String name)方法未实现,这时候想,自定义类加载器的时候,应该是要实现这个方法的。接下来找一个具体实现的类加载器看一下:
二、简单实现一下findClass
@Override
protected Class<?> findClass(String name) throws ClassNotFoundException {
File f = new File("e:/xxx/xxx/", name.replace(".", "/").concat(".class"));
try {
FileInputStream fis = new FileInputStream(f);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int b = 0;
while ((b=fis.read()) !=0) {
baos.write(b);
}
byte[] bytes = baos.toByteArray();
baos.close();
fis.close();
// 帮忙把class文件load到内存中 并关联好引用
return defineClass(name, bytes, 0, bytes.length);
} catch (Exception e) {
e.printStackTrace();
}
return super.findClass(name);
}
思考
自定义的类加载器什么时候用到呢?