自己写个 类加载器
例
包图
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 );
}
}
@Override
protected 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);
}
}