• 反射及在运用过程中出现的IllegalAccessException异常


    首先了解一下反射:

    反射:将类的各个组成部分封装成其他对象,这就是反射机制
    在这里插入图片描述
    在字节码文件加载进内存之后,会形成一个Class类对象
    以下为获取Class对象的三种方式:
    ​​​​​在这里插入图片描述
    在这里插入图片描述
    Class.forName(”全类名“):将字节码文件加载进内存,返回Class 对象

    多用于配置文件,可以将类名定义在配置文件中。读取文件加载类

    若字节码文件已经加载进内存,只需要通过类名.Class来获取

    多用于参数的传递

    已经存在实例化对象,可以通过对象.getClass()方法,getClass方法继承自Object类

    多用于对象的获取字节码的方式

    结论:同一个字节码文件(*.class)在一次程序运行过程中,只会被加载一次,不论通过哪一种方法获取的Class对象都是同一个源代码中的成员方法、成员变量以及构造器会分别被封装为各自对应的数组对象

    通过Class对象的获取方法可以分别获取到成员变量、成员方法和构造器:
    在这里插入图片描述
    因为成员方法、成员变量以及构造器的访问权限修饰符不同
    不同的获取的获取方法可能会出现获取不到私有成员的情况,
    相同的是,在获取到成员变量、成员方法和构造器后,都无法直接对私有权限修饰符修饰的成员变量和成员方法及构造器进行操作
    如果直接对过去到的私有成员进行操作,会抛出IllegalAccessException异常

    解决方案:忽略权限修饰符的安全检查

    获取到的对象.setAccessible(true);
    在获取到成员方法、成员变量、构造器之后,在相应的类method、Field、Constructor中还可以对获取到的对象进一步操作。

  • 相关阅读:
    JAVA 0基础 字符编码
    【杂项笔记】Linux使用相关指令(持续更新)
    AJAX到AXIOS常用格式汇总
    OAuth 2.0一键登录那些事
    你了解PMP考试新考纲的内容吗?
    Golang 常用的开源库和学习资源有哪些
    754、到达终点数字
    【强化学习论文合集】ICRA-2022 强化学习论文 | 2022年合集(六)
    BUG 随想录 - Java: 程序包 com.example.xxx 不存在
    `算法题解` `LuoGU` P3128 [USACO15DEC]Max Flow P
  • 原文地址:https://blog.csdn.net/qq_37705525/article/details/125636120