欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java自定义的类加载器,java自定义加载,在java中类加载器有以

来源: javaer 分享于  点击 8747 次 点评:267

Java自定义的类加载器,java自定义加载,在java中类加载器有以


在java中类加载器有以下几种

java虚拟机自带的加载器 1)根类加载器(Bootstrap,c++实现)2)扩展类加载器(Extension,java实现) 3) 系统类加载器(System,java实现)用户自定义的类加载器 java.lang.ClassLoader的子类 用户可以定制类的加载方式

Java自定义类加载器

package classloader;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.FileInputStream;/** *  * 一、ClassLoader加载类的顺序 *  1.调用 findLoadedClass(String) 来检查是否已经加载类。 *  2.在父类加载器上调用 loadClass 方法。如果父类加载器为 null,则使用虚拟机的内置类加载器。  *  3.调用 findClass(String) 方法查找类。 * 二、实现自己的类加载器 *  1.获取类的class文件的字节数组 *  2.将字节数组转换为Class类的实例 *  *  * @author lei 2011-9-1 */public class ClassLoaderTest {    public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {        //新建一个类加载器        MyClassLoader cl = new MyClassLoader("myClassLoader");        //加载类,得到Class对象        Class<?> clazz = cl.loadClass("classloader.Animal");        //得到类的实例        Animal animal=(Animal) clazz.newInstance();        animal.say();    }}class Animal{    public void say(){        System.out.println("hello world!");    }}class MyClassLoader extends ClassLoader {    //类加载器的名称    private String name;    //类存放的路径    private String path = "E:\\workspace\\Algorithm\\src";    MyClassLoader(String name) {        this.name = name;    }    MyClassLoader(ClassLoader parent, String name) {        super(parent);        this.name = name;    }    /**     * 重写findClass方法     */    @Override    public Class<?> findClass(String name) {        byte[] data = loadClassData(name);        return this.defineClass(name, data, 0, data.length);    }    public byte[] loadClassData(String name) {        try {            name = name.replace(".", "//");            FileInputStream is = new FileInputStream(new File(path + name + ".class"));            ByteArrayOutputStream baos = new ByteArrayOutputStream();            int b = 0;            while ((b = is.read()) != -1) {                baos.write(b);            }            return baos.toByteArray();        } catch (Exception e) {            e.printStackTrace();        }        return null;    }}
相关栏目:

用户点评