- 反射
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