Accessable属性是继承自AccessibleObject 类. 功能是启用或禁用安全检查。
java中的private、protected等关键字,用来限制别的类对于本类的访问。但是有的时候在没有权限的时候也需要有操作这些成功的权限,这在反射中常常会遇到,setAccessible()方法就是实现这个功能的。
比如,一个反射中需要处理一个类的私有成员变量,如果没有使用“filed.setAccessible(true);”语句,就是出现以下异常:
告诉你直接操作private成员是不行滴。
如果在操作之前加上这个语句:filed.setAccessible(true);,就能顺利的执行了。
filed.setAccessible(true);的作用要清楚:它不是让字段的访问权限变了,私有字段依然是私有字段,非本类对象依然是不能直接访问该字段的。它的作用是,不进行访问检查,当执行后面的操作的时候,JVM会直接忽略字段的访问控制符,直接进行操作。
那是不是没有“filed.setAccessible(true);”就不能操作字段了呢?
不是的。如果是public,或者别的常规方法就能访问的情况下,没有该语句也不影响程序执行。但是没有加了该语句的代码执行的快,因为任何检查都是要耗时间的呀。
我这里都讲字段了,成员方法也是一样的,明白意思就是了。