第8单元:类加载器的深入讲解与应用 |
第8单元:类加载器的深入讲解与应用 |
第8单元:类加载器的深入讲解与应用
44.类加载器及其委托机制的深入分析
package java_5; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class MyClassLoader extends ClassLoader { static String srcPath; static String destPath; public static void main(String[] args) throws Exception { srcPath = args[0]; destPath = args[1]; InputStream in = new FileInputStream(srcPath ); srcPath = srcPath .substring(0, srcPath.lastIndexOf('\\' ) - 6); OutputStream out = new FileOutputStream(srcPath + "\\" + destPath + ".class"); ClassLoader cl = MyClassLoader.class .getClassLoader().getParent(); System. out.println(cl.getClass().getName()); addSecrity(out, in); } public static void addSecrity(OutputStream dest, InputStream src) throws IOException { int b = 0; while ((b = src.read()) != -1) { b = b ^ 0xff; dest.write(b); } } @Override protected java.lang.Class<?> findClass(String name) throws ClassNotFoundException { String srcPath = "G:\\workplace\\javase\\lib\\" ; InputStream in = null; try { in = new FileInputStream(srcPath+name+".class" ); } catch (FileNotFoundException e) { e.printStackTrace(); } ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { addSecrity(baos,in); } catch (IOException e) { e.printStackTrace(); } byte[] bytes = baos.toByteArray(); Class clazz = defineClass (bytes, 0, bytes.length ); return clazz; }; private String name; public MyClassLoader() { } public MyClassLoader(String name) { this.name = name; } }
有包名的类不能调用无包名的类
时间: 2024-10-28 22:02:45