Java反射学习-4 - 反射调用方法

反射调用方法:

 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 }

结果如下:

 

posted @ 2018-06-04 21:06  清风拂来  阅读(454)  评论(0编辑  收藏  举报