实体类

 1 import java.lang.reflect.Field;
 2 import java.util.Date;
 3 
 4 public class Program {
 5     public Program() {
 6     }
 7 
 8     public Program(String str, Date date, int i) {
 9         this.str = str;
10         this.date = date;
11         this.i = i;
12     }
13 
14     private String str = "Hello";
15     private Date date = new Date();
16     protected int i = 0;
17 
18     public int getI() {
19         return i;
20     }
21 
22     public String getStr() {
23         return str;
24     }

测试方法

 1  public static void main(String[] args) throws IllegalArgumentException,
 2             IllegalAccessException {
 3         try {
 4             Program program = new Program();
 5             Class progClass = program.getClass();
 6             //通过反射机制,获取到类Program中的str
 7             Field strField1 = progClass.getDeclaredField("str");
 8             //输出private java.lang.String Program.str            
 9             System.out.println("Field found: " + strField1.toString());
10 
11             //同上
12             Field dateField = progClass.getDeclaredField("date");
13             System.out.println("Field found: " + dateField.toString());
14             //同上
15             Field iField = progClass.getDeclaredField("i");
16             System.out.println("Field found: " + iField.toString());
17             
18             //我想说的是这一点,这里能获取到类Program中的str并对其修改。
19             //Program类中没有对str设置的setStr()方法,而且使用了private,
20             //这是不允许访问的。
21             //但是我们能通过反射机制,从而获取private类型的值,并直接改。
22             Field strField = progClass.getDeclaredField("str");
23             strField.set(program, "我是Str字符串。");
24             //输出:我是Str字符串。
25             System.out.println(program.getStr());
26             
27         } catch (NoSuchFieldException ex) {
28             System.out.println(ex.toString());
29         }
30     }
31 }

输出是:

Field found: private java.lang.String Program.str
Field found: private java.util.Date Program.date
Field found: protected int Program.i
我是Str字符串。

posted on 2017-04-11 09:54  DeadPool-X  阅读(182)  评论(0编辑  收藏  举报