• 反射
 1 import java.lang.reflect.Constructor;
 2 import java.lang.reflect.Field;
 3 import java.lang.reflect.Method;
 4
 5 public class Main
 6 {
 7     public static void main(String[] args) throws Exception {
 8
 9             //获得Class
10             Class m1 = Class.forName("Test01");///////////
11             //System.out.println(m1.getName());
12
13         //获得成员变量
14             Field[] field1 = m1.getDeclaredFields();
15             //for(Field m:field1)
16             //{
17             //    System.out.println(m);
18             //}
19
20         //获得方法
21             Method[] method1 = m1.getDeclaredMethods();
22
23             //System.out.println(method2);
24             //System.out.println(method3);
25         //获得构造器
26         Constructor[] constructor1 = m1.getDeclaredConstructors();
27         Constructor constructor2 = m1.getDeclaredConstructor(null);
28         Constructor constructor3 = m1.getDeclaredConstructor(String.class,int.class,String.class);
29         //System.out.println(constructor2);
30         //System.out.println(constructor3);
31
32         //for(Constructor m:constructor1)
33         //{
34         //     System.out.println("构造器" + m);
35         //}
36
37         //使用获得的构造器方法新建对象
38         Test01 test1 = (Test01) constructor2.newInstance();//调用无参构造器
39         Test01 test2 = (Test01) constructor3.newInstance("chenwen", 23, "bit");//调用有参构造器,传入参数
40         //System.out.println(test1);
41         //System.out.println(test2.getName() + test2.getAge() + test2.getSchool());
42
43         //使用获得的方法
44         Method method2 = m1.getDeclaredMethod("getName", null);
45         Method method3 = m1.getDeclaredMethod("setName", String.class);//有参方法
46         method3.invoke(test1, "lihao");//调用成员方法
47         System.out.println(method2.invoke(test1));//调用成员方法
48
49         //操作获得的成员变量
50         Field f = m1.getDeclaredField("age");//获得属性
51         f.setAccessible(true);//age为私有属性,使用setAccessible,不做安全检查,直接操作
52         f.set(test2, 34);//操作对象test2,将f对应的属性age设置为34
53         System.out.println(test2.getAge());
54     }
55
56 }
反射基础

操作泛型

  • 脚本执行引擎Rhino
02-11 09:31