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

首先了解一下反射:

  • 反射:将类的各个组成部分封装成其他对象,这就是反射机制

    • 在字节码文件加载进内存之后,会形成一个Class类对象
      以下为获取Class对象的三种方式:
      ​​​​​

       

       

       

      • Class.forName(”全类名“):将字节码文件加载进内存,返回Class 对象

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

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

        • 多用于参数的传递

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

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

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

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

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

        获取到的对象.setAccessible(true);

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

        谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值