需要了解:
回答:
手写一个ClassLoader
package com.liu.socket;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
public class Test extends ClassLoader{
private String path;
private String className;
public Test(String path,String className) {
this.path = path;
this.className = className;
}
@Override
public Class findClass(String name){
byte[] b = null;
try {
b = loadClassData(name);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return defineClass(className, b, 0, b.length);
}
private byte[] loadClassData(String name) throws IOException {
String namePath = path+name+".class";
InputStream in = null;
ByteArrayOutputStream out = null;
try {
in = new FileInputStream(new File(namePath));
out = new ByteArrayOutputStream();
int i = 0;
while((i = in.read()) != -1){
out.write(i);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e){
e.printStackTrace();
}finally {
in.close();
out.close();
}
return out.toByteArray();
}
}
package com.liu.socket;
public class ClassLoaderCheck {
public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
Test test = new Test("D:\\","Test");
Class class1 = test.loadClass("test");
System.out.println(class1.getName());
class1.newInstance();
}
}