A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张强+ 黑马帝   /  2011-10-21 22:10  /  2000 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

导读:Test1.java: package test; import java.io.*;import java.lang.reflect.*; class AClassLoader extends ClassLoader {    public Class loadClass(String name, boolean resolve) throws ClassNotFoundException {        Class klass = null;        try {            klass = findLoadedClass(name); //检查该类是否已经被装载。            if (klass != null) {                return klass;               }                        byte[] bs = getClassBytes(name);//从一个特定的信息源寻找并读取该类的字节。            if (bs != null && bs.length > 0) {                klass = defineClass(name, bs, 0, bs.length);               }            if (klass == null) { //如果读取字节失败,则试图从JDK的系统API中寻找该类。                klass = findSystemClass(name);            }            if (resolve && klass != null) {                resolveClass(klass);               }        } catch (IOException e) {            throw new ClassNotFoundException(e.toString());        }           System.out.println("klass == " + klass);        return klass;    }       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;   //如果查找失败,则放弃查找。捕捉这个异常主要是为了过滤JDK的系统API。        }        byte[] bs = new byte[fis.available()];        fis.read(bs);        return bs;    }} public class Test1 {    public static void main(String[] args) throws Exception{        AClassLoader loader = new AClassLoader();        Class c = loader.loadClass("test.A", false);        System.out.println(c);        Object o = c.newInstance();        System.out.println(o);        Method m = c.getMethod("print", java.lang.String.class);        m.invoke(o, "bitan");    }   }     A.java package test;public class A {    public void print(String str) {        System.out.println("嗨," + str + ", 你终于找到我了!");       }    public String toString() {        return "我是一个A对象!";       }   }   结果:   C:

1 个回复

倒序浏览
祁焱 黑马帝 2011-10-21 22:41:45
沙发
package test;

import java.io.*;

import java.lang.reflect.*;

class AClassLoader extends ClassLoader {

    public Class loadClass(String name, boolean resolve) throws ClassNotFoundException {
        Class klass = null;
        try {
            klass = findLoadedClass(name); //检查该类是否已经被装载。         
            if (klass != null) {
                return klass;
            }
            byte[] bs = getClassBytes(name);//从一个特定的信息源寻找并读取该类的字节。        
            if (bs != null && bs.length > 0) {
                klass = defineClass(name, bs, 0, bs.length);
            }
            if (klass == null) { //如果读取字节失败,则试图从JDK的系统API中寻找该类。        
                klass = findSystemClass(name);
            }
            if (resolve && klass != null) {
                resolveClass(klass);
            }
        } catch (IOException e) {
            throw new ClassNotFoundException(e.toString());
        }
        System.out.println("klass == " + klass);
        return klass;
    }

    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;   //如果查找失败,则放弃查找。捕捉这个异常主要是为了过滤JDK的系统API。     
        }
        byte[] bs = new byte[fis.available()];
        fis.read(bs);
        return bs;
    }
}

public class Test1 {

    public static void main(String[] args) throws Exception {
        AClassLoader loader = new AClassLoader();
        Class c = loader.loadClass("test.A", false);
        System.out.println(c);
        Object o = c.newInstance();
        System.out.println(o);
        Method m = c.getMethod("print", java.lang.String.class);
        m.invoke(o, "bitan");
    }
}
A.java package test;
public class A {

    public void print(String str) {
        System.out.println("嗨," + str + ", 你终于找到我了!");
    }

    public String toString() {
        return "我是一个A对象!";
    }
}

结果:   
C
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马