反射调用方法:
1 package cn.tx.reflect; 2 3 import java.lang.reflect.Constructor; 4 import java.lang.reflect.Method; 5 6 /** 7 * 反射调用方法 8 * Object java.lang.reflect.Method.invoke(Object obj, Object... args) 9 * 如果底层方法是实例方法,第一个参数就是该实例对象,第二个参数是方法的参数列表,invoke的返回值就是实例方法的返回值 10 * 如果底层方法是静态的,那么可以忽略指定的obj参数,可以为null 11 * 如果底层方法所需的形参为0,则所提供的args数组长度可以为0或null(参见后面的method2.invoke(object)) 12 * @author Administrator 13 * 14 */ 15 public class ReflectLearn4 { 16 public static void main(String[] args) throws Exception { 17 18 Class<?> clazz = Class.forName("cn.tx.reflect.Person"); 19 //获取cn.tx.Person类的无参构造 20 Constructor<?> constructor = clazz.getConstructor(); 21 //获取一个实例 22 Object object = constructor.newInstance(); 23 24 //反射调用setName()方法:method.invoke,返回的就是调用的方法的返回值 25 Method method = clazz.getDeclaredMethod("setName", String.class); 26 Object invoke = method.invoke(object, "james");//set方法,没有返回值,此处invoke是 null 27 System.out.println(object.toString()); //Person [address=null, id=null, name=james] 28 29 //反射调用getName()方法 30 Method method2 = clazz.getDeclaredMethod("getName"); 31 Object invoke2 = method2.invoke(object); 32 System.out.println(invoke2); 33 34 //反射调用静态方法 35 Method method3 = clazz.getDeclaredMethod("printInfo",null); //printInfo方法没有参数,写null 36 method3.invoke(null,null);//静态方法,第一个参数可以为null 37 38 } 39 40 }
结果如下: