学习笔记: 学习思想/实现方式,代码没有进行测试,
public class TestCustomClassLoader extends ClassLoader{
/**
* 重新 双亲委派
* 实际上只能处理自定义类加载器的处理模式
* @param name
* @return
* @throws ClassNotFoundException
*/
@Override
public Class<?> loadClass(String name) throws ClassNotFoundException {
// 查找 class文件
String baseUrl = "d:/user/jvm";
File file = new File(baseUrl, name + ".class");
// 是否父类加载(选择性执行)
if (! file.exists()){
super.loadClass(name);
}
// 加载文件,相当于 自定义 findClass()方法
try {
byte[] bytes = Files.readAllBytes(file.toPath());
return defineClass(name, bytes, 0, bytes.length);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
// 自定义加载器进行处理
TestCustomClassLoader.class.getClassLoader().loadClass("");
}
}