网小鱼Java的bug小集锦0009

这个bug错误是出现在学习反射过程中关于暴力反射时候,设置被反射对象的私有属性时候报错信息,mark一下下~
在这里插入图片描述报错信息:IllegalAccessException,非法获取异常,这里可以发现直接通过字节码对象掉出来的私有属性可以直接打印,用getDeclaredField方法即可,但是如果想要获得私有属性的修改,就需要用到暴力反射中的setAccessiable来进行处理.,示意图如下
在这里插入图片描述注意:这里在设置setAccessible的传入参数的过程中,传的参数是一个布尔值,需要设置布尔值的类型为true,也就是表示反射的对象的可设置的性能是true.这里我们可以进入源码看一下,看一下API文档的注解

setAccessible
public void setAccessible(boolean flag)
					throws SecurityException
将此对象的accessible标志设置为指示的布尔值.值为true则表示反射的对象在使用时应该取消Java语言访问检查,值为false则表示反射的对象应该试试Java语言访问检查.
首先,若存在安全管理器,在ReflectPermission("supressAccessChecks")权限下调用checkPermission方法.
如果flag对象为true,并且不嫩更改此对象的可访问性(例如,如果次元素对象时Class类的Constractor对象),则会引发SecurityException.
如果此对象时java.lang.Class类的Constructor对象,并且flag为true,则会引发SecurityException。

参数:
flag - accessible 标志的新值
抛出:
SecurityException - 如果请求被拒绝。
另请参见:
SecurityManager.checkPermission(java.security.Permission), RuntimePermission
在这里插入图片描述同理,关于私有方法的反射可见性的设置也是同样的方法.
在这里插入图片描述修改之后的执行结果如下:
在这里插入图片描述