java反射之setAccessible()方法

Accessable属性是继承自AccessibleObject 类. 功能是启用或禁用安全检查。

java中的private、protected等关键字,用来限制别的类对于本类的访问。但是有的时候在没有权限的时候也需要有操作这些成功的权限,这在反射中常常会遇到,setAccessible()方法就是实现这个功能的。

比如,一个反射中需要处理一个类的私有成员变量,如果没有使用“filed.setAccessible(true);”语句,就是出现以下异常:

告诉你直接操作private成员是不行滴。

如果在操作之前加上这个语句:filed.setAccessible(true);,就能顺利的执行了。

filed.setAccessible(true);的作用要清楚:它不是让字段的访问权限变了,私有字段依然是私有字段,非本类对象依然是不能直接访问该字段的。它的作用是,不进行访问检查,当执行后面的操作的时候,JVM会直接忽略字段的访问控制符,直接进行操作。

那是不是没有“filed.setAccessible(true);”就不能操作字段了呢?

不是的。如果是public,或者别的常规方法就能访问的情况下,没有该语句也不影响程序执行。但是没有加了该语句的代码执行的快,因为任何检查都是要耗时间的呀。

我这里都讲字段了,成员方法也是一样的,明白意思就是了。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值