Java setAccessible方法作用

在Java中可以通过反射进行获取实体类中的字段值,当未设置Field的setAccessible方法为true时,会在调用的时候进行访问安全检查,会抛出IllegalAccessException异常

这是JDK手册的中文说明:

那么,解决方案就是设置Field对象的Accessible的访问标志位为Ture,就可以通过反射获取私有变量的值,在访问时会忽略访问修饰符的检查,附上例子一枚。

 1 public class MyTest3 {
 2 
 3     
 4     public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
 5         Student student = new Student();
 6         Field field = student.getClass().getDeclaredField("name");
 7         field.setAccessible(true);
 8         System.out.println(field);
 9         Object object = field.get(student);
10         System.out.println(object);
11     }
12     
13     
14     
15 }
16 
17 
18 class Student{
19     
20     private String name;
21     
22     private Integer age;
23     
24     private String sex;
25 
26     public String getName() {
27         return name;
28     }
29 
30     public void setName(String name) {
31         this.name = name;
32     }
33 
34     public Integer getAge() {
35         return age;
36     }
37 
38     public void setAge(Integer age) {
39         this.age = age;
40     }
41 
42     public String getSex() {
43         return sex;
44     }
45 
46     public void setSex(String sex) {
47         this.sex = sex;
48     }
49     
50 }
View Code

 

末尾补充下,Field类还有个静态方法,可以一次性设置多个Field字段为指定的值。

中文JDK的说明

第一个参数 array ,就是要设置flag标志位的Field对象的数组

第二个参数 flag  ,将array数组的所有Field对象设置为flag标识符的新值

*******************Method和Field的Accessible的用法一致*******************

 

posted @ 2018-11-30 19:57  星小梦  阅读(15634)  评论(0编辑  收藏  举报