1 import java.lang.reflect.Constructor;
2 import java.lang.reflect.Field;
3 import java.lang.reflect.Method;
4
5 class Person {
6 private int age = -1;
7
8 public Person(int age) {
9 this.age = age;
10 }
11
12 private void method() {
13 System.out.println("this is a private method.");
14 }
15
16 public void printAge() {
17 System.out.println(this.age);
18 }
19 }
20
21 public class ReflectionDemo03 {
22
23 /**
24 * @param args
25 */
26 public static void main(String[] args) throws Exception {
27 //通过反射创建对象
28 Class<?> classType = Person.class;
29
30 Constructor cons = classType.getConstructor(int.class); // 获得构造方法
31
32 Person person = (Person) cons.newInstance(20);
33
34 person.printAge(); // 输出20
35
36 // 修改私有的成员变量age
37
38 Field field = classType.getDeclaredField("age");
39 field.setAccessible(true); // 抑制Java规范检查 否则会抛出异常
40 field.set(person, 50);
41
42 person.printAge(); // 变成了50
43
44 // 调用私有的方法
45 Method method = classType.getDeclaredMethod("method", new Class[] {}); // 获得method方法的Method对象
46 method.setAccessible(true); // 压制检查
47 method.invoke(person, new Class[] {});
48 }
49 }