反射在java中有很大用处,下面举例说明下,在java中怎么通过完整路径获取对象,调用方法。
1、需要通过反射获取的类
package reflectionTset.com.reflection;
public class Reflection {
/**
* 带参
* @param name
* @param sex
* @param age
* @return
*/
public String methodParameter(String name,String sex,int age){
System.out.println("姓名:" + name + " 性别:" + sex + " 年龄:" + age);
return "有参方法操作成功";
}
/**
* 测试反射不带参方法
* @param name
* @param sex
* @param age
*/
public String methodNoParameter(){
System.out.println("欢迎来到无参反射测试方法");
return "无参方法操作成功";
}
}
2、测试类
package reflectionTset.com.test;
import java.lang.reflect.Method;
/**
* 放射测试类
* @author Administrator
*
*/
public class ReflectionTest {
/**
* 测试反射带参方法
* @param name
* @param sex
* @param age
*/
public static void methodParameterTest(){
try {
//返回与带有给定字符串名的类或接口相关联的 Class 对象
Class c = Class.forName("reflectionTset.com.reflection.Reflection");
//创建该class表示的一个对象
Object obj = c.newInstance();
//返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法
//获取一个方法对象,假设方法的参数是一个int,method名为setAge
Method sAge = c.getMethod("methodParameter", new Class[] {String.class,String.class,int.class});
//设置参数
Object[] arguments = new Object[] {"你妹","男",29};
//执行方法
//对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。个别参数被自动解包,以便与基本形参相匹配,基本参数和引用参数都随需服从方法调用转换。
Object backStr = sAge.invoke(obj, arguments);
System.out.println("执行带参方法的返回值:" + backStr);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 测试反射带参方法
* @param name
* @param sex
* @param age
*/
public static void methodNoParameterTest(){
try {
//返回与带有给定字符串名的类或接口相关联的 Class 对象
Class c = Class.forName("reflectionTset.com.reflection.Reflection");
//创建该class表示的一个对象
Object obj = c.newInstance();
//返回一个 Method 对象,它反映此 Class 对象所表示的类或接口的指定公共成员方法
//获取一个方法对象,假设方法的参数是一个int,method名为setAge
Method sAge = c.getMethod("methodNoParameter");
//执行方法
//对带有指定参数的指定对象调用由此 Method 对象表示的底层方法。个别参数被自动解包,以便与基本形参相匹配,基本参数和引用参数都随需服从方法调用转换。
Object backStr = sAge.invoke(obj);
System.out.println("执行无参方法的返回值:" + backStr);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
//带参方法测试
methodParameterTest();
//无参方法测试
methodNoParameterTest();
}
}