类加载器

来源:互联网 发布:软件网络安全策略 编辑:程序博客网 时间:2024/05/22 17:46




自己写个 类加载器

包 图


package com.in;import java.io.FileInputStream;import java.io.InputStream;import java.util.Date;import java.util.Properties;public class Reflect extends Date {public String toString(){return "hello";}}

写个自定义加载器加载Reflect.class

package com.in;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;import java.util.Date;public class MyClassLoader extends ClassLoader{private String dir;public MyClassLoader(){}public MyClassLoader(String dir){this.dir = dir;}public  void cypher(InputStream in,OutputStream out) throws IOException{int len = 0;while((len = in.read())!=-1){out.write(len );}}@Overrideprotected Class<?> findClass(String name) throws ClassNotFoundException {try {FileInputStream fis = new FileInputStream(dir + '\\' +  name.substring(name.lastIndexOf('.')+1) + ".class");ByteArrayOutputStream bos = new ByteArrayOutputStream();cypher(fis,bos);fis.close();byte[] bytes = bos.toByteArray();return defineClass(name, bytes, 0, bytes.length);} catch (Exception e) {e.printStackTrace();}return super.findClass(name);}public static void main(String[] args) throws Exception {MyClassLoader my = new MyClassLoader("classLib");Class clazz = my.loadClass("com.in.Reflect");Date d = (Date)clazz.newInstance();System.out.println(d);}}




0 0