当前位置:网站首页>反射及在运用过程中出现的IllegalAccessException异常

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

2022-07-06 11:23:00 qq_37705525

首先了解一下反射:

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

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

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

多用于参数的传递

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

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

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

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

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

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

原网站

版权声明
本文为[qq_37705525]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_37705525/article/details/125636120

随机推荐