首页 > 编程语言 > 详细

java自定义ClassLoader简单案例

时间:2021-07-14 10:28:29      阅读:28      评论:0      收藏:0      [点我收藏+]

自定义ClassLoader,继承ClassLoader,代码:

package testJvm;

import java.io.*;

/**
 * @author: Xu Xiang  @createTime: 2021/7/14 8:41
 * Description: 
 */
public class XuXiangClassLoader extends ClassLoader {
    @Override
    protected Class<?> findClass(String name) throws ClassNotFoundException {
        File file = new File("d:/test/", name.replaceAll(".", "/").concat(".class"));
        try {
            FileInputStream fis = new FileInputStream(file);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            int b = 0;
            // 从文件里读出来,写到字节数组里
            while ((b = fis.read()) != 0) {
                baos.write(b);
            }
            // 转换成二进制的字节数组
            byte[] bytes = baos.toByteArray();
            baos.close();
            fis.close();
            // 将二进制东西转换成class类对象
            return defineClass(name, bytes, 0, bytes.length);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return super.findClass(name);
    }

    public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
        XuXiangClassLoader xxClassLoader = new XuXiangClassLoader();
        Class aClass = xxClassLoader.loadClass("testJvm.Hello");
        Hello o = (Hello)aClass.newInstance();
        o.hello();
    }
}

其中,d盘目录下test文件下面的Hello.class的原java代码如下:

package testJvm;

/**
 * @author: Xu Xiang  @createTime: 2021/7/14 8:44
 * Description: 
 */
public class Hello {
    public void hello() {
        System.out.println("hello xuxiang!");
    }
}

运行main方法:

技术分享图片

 以上;

 

java自定义ClassLoader简单案例

原文:https://www.cnblogs.com/xuyinshan/p/15009325.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!