java反射应用

   反射在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();
	}
}

猜你喜欢

转载自x125858805.iteye.com/blog/2262979