public class DiyClassLoad extends ClassLoader {
public Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
Class clazz = null;
try {
clazz = findLoadedClass(name);
if (clazz != null) {
return clazz;
}
byte[] bs = getClassBytes(name);
if (bs != null && bs.length > 0) {
clazz = defineClass(name, bs, 0, bs.length);
}
if (clazz == null) {
clazz = findSystemClass(name);
}
if (resolve && clazz != null) {
resolveClass(clazz);
}
} catch (IOException e) {
throw new ClassNotFoundException(e.toString());
}
System.out.println("calzz == " + clazz);
return clazz;
}
private byte[] getClassBytes(String className) throws IOException {
String path = System.getProperty("java.class.path") + File.separator;
path += className.replace('.', File.separatorChar) + ".class";
System.out.println(path);
FileInputStream fis = null;
try {
fis = new FileInputStream(path);
} catch (FileNotFoundException e) {
System.out.println(e);
return null;
}
byte[] bs = new byte[fis.available()];
fis.read(bs);
return bs;
}
}
public class DiyObject {
public void print(String str) {
System.out.println("this is DiyObject!");
System.out.println(str);
}
public String toString() {
return "this is DiyObject!";
}
public static void main(String[] args) throws Exception {
DiyClassLoad loader = new DiyClassLoad();
Class c = loader.loadClass("com.***.tom.test.classload.DiyObject", false);
Object o = c.newInstance();
Method m = c.getMethod("print", java.lang.String.class);
m.invoke(o, "just test for calssload !");
}
}
系统的3个类加载器分别为:
1. Bootstrap CLassloder
2. Extention ClassLoader
3. AppClassLoader
加载器获取的是Class
参考资料:
http://blog.youkuaiyun.com/ggjjzhzz/article/details/321292
http://www.cnblogs.com/editice/p/5420712.html