Description de la méthode
1. Utilisez la méthode findClass(String) pour recharger le fichier de bytecode de classe, car dans ClassLoader, la méthode findClass est modifiée par protected et ne peut appeler que des sous-classes. Il n'y a pas de méthode d'implémentation et une seule est lancée. .Exception ClassNotFoundException.
2. Réécrivez la méthode findClass pour qu'elle puisse être appelée par des objets externes et classez le code logique du fichier bytecode.
Instances
package com; import java.io.InputStream; import java.net.URL; public class MyClassLoader extends ClassLoader{ /** * 加载class文件 * 重写此方法的目的是为了能让此方法被外部调用,父类的 findClass 是 protected 修饰的,只能被子类调用 * @param name 类的全类名 示例: com.xd.User * @return * @throws ClassNotFoundException */ @Override public Class<?> findClass(String name) throws ClassNotFoundException { try { // 获取class文件名称 去掉包路径 String fileName = name.substring(name.lastIndexOf(".") + 1) + ".class"; // 获取文件输入流 InputStream is = this.getClass().getResourceAsStream(fileName); // 读取字节 byte[] b = new byte[is.available()]; is.read(b); // 将byte字节流解析成jvm能够识别的Class对象 return defineClass(name, b, 0, b.length); } catch (Exception e) { throw new ClassNotFoundException(); } } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!