import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
public class DiyClassLoader extends ClassLoader {
private String dir;
public DiyClassLoader(String dir) {
this.dir = dir;
}
public DiyClassLoader(ClassLoader parent, String dir) {
super(parent);
this.dir = dir;
}
@Override
protected Class> findClass(String name) throws ClassNotFoundException {
String file = dir + name.replace(".", File.separator) + ".class";
FileInputStream fileInputStream = null;
try {
fileInputStream = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
int read = 0;
while (true) {
try {
if (!((read = fileInputStream.read()) != -1)) {
break;
}
} catch (IOException e) {
e.printStackTrace();
}
byteArrayOutputStream.write(read);
}
try {
fileInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
byteArrayOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
byte[] bytes = byteArrayOutputStream.toByteArray();
// 将.class字节码文件转为class对象
return defineClass(name, bytes, 0, bytes.length);
}
public static void main(String[] args)
throws IllegalAccessException, InstantiationException, ClassNotFoundException {
Class> aClass = new DiyClassLoader("C:\\MyApplication\\idea\\jmx\\target\\classes\\").loadClass(
"hello.Person");
aClass.newInstance();
}
}