在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 }
末尾補充下,Field類還有個靜態方法,可以一次性設置多個Field字段為指定的值。
中文JDK的說明
第一個參數 array ,就是要設置flag標志位的Field對象的數組
第二個參數 flag ,將array數組的所有Field對象設置為flag標識符的新值
*******************Method和Field的Accessible的用法一致*******************