Java 自定义ClassLoad

来源:互联网 发布:淘宝网黄金首饰 编辑:程序博客网 时间:2024/06/07 01:58

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.csdn.net/ggjjzhzz/article/details/321292

http://www.cnblogs.com/editice/p/5420712.html

0 0
原创粉丝点击