• 技术文章 >java >java教程

    java如何重写findClass方法

    小妮浅浅小妮浅浅2021-07-27 09:19:33原创5293

    方法说明

    1、使用findClass(String)方法,可以重新加载class字节码文件,因为在ClassLoader中,ffindClass方法由protected修饰,只能调用被子类,没有实现方法,只抛出一个ClassNotFoundException的异常。

    2、重写findClass的方法,这样就可以被外部对象调用,并class字节码文件的逻辑代码。

    实例

    package com;
    import java.io.InputStream;
    import java.net.URL;
    public class MyClassLoader extends ClassLoader{
        /**
         * 加载class文件
         * 重写此方法的目的是为了能让此方法被外部调用,父类的 findClass 是 protected 修饰的,只能被子类调用
         * @param name   类的全类名 示例: com.xd.User
         * @return
         * @throws ClassNotFoundException
         */
        @Override
        public Class<?> findClass(String name) throws ClassNotFoundException {
            try {
                // 获取class文件名称  去掉包路径
                String fileName = name.substring(name.lastIndexOf(".") + 1) + ".class";
                // 获取文件输入流
                InputStream is = this.getClass().getResourceAsStream(fileName);
                // 读取字节
                byte[] b = new byte[is.available()];
                is.read(b);
                // 将byte字节流解析成jvm能够识别的Class对象
                return defineClass(name, b, 0, b.length);
            } catch (Exception e) {
                throw new ClassNotFoundException();
            }
        }
    }

    以上就是java重写findClass方法的介绍,希望对大家有所帮助。更多Java学习指路:java教程

    本教程操作环境:windows7系统、java10版,DELL G3电脑。

    专题推荐:java findclass
    品易云
    上一篇:java之JDK注解的介绍 下一篇:java中Lamdba表达式的用法整理

    相关文章推荐

    • java环境变量的作用• javascript字符串类型的转换• java判断素数• java程序怎么运行• java程序编好了怎么运行• java多态的理解• java内存泄漏• java方法重载• java数据结构• java内存泄漏的解决方法• java如何检查内存泄漏• java中不同变量的区别• java代码块的执行顺序是什么

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网