java反射案列

package com.fh.util.aop;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

/**反射案列
 * @author Administrator
 *
 */
public class ReflectionTest {
	
	public String test(String name ,int age) {
		
		return name+",今年"+age+"岁,是一个极富好奇心地乐观青年!";
	}
	
	public static void main(String args[]) {
		
			String str = "test , reflection";
			int len1 = str.length();
			System.out.println("直接调用length() :"+len1);
			
			//反射String.length()方法
			//直接填入调用该方法的对象str,这里不需要newInstance()
			Object len2 = Reflection(str,str.getClass(),"length",null,null);
			System.out.println("java 反射调用length() :"+len2);
	
			Class<?> clazz;
		
				try {
					
					//调用自己创建的函数,
					//反射得到类 包名+类名,我这边没有包名就直接是 "ReflectionTest"
					clazz = Class.forName("com.fh.util.aop.ReflectionTest");
					
					//直接java反射得到方法
					Method method= clazz.getMethod("test",String.class,int.class);
					Object obj1 = method.invoke(clazz.newInstance(),"xiaojun",23);
					System.out.println("直接反射:"+obj1);
					
					
					//创建函数完成反射
				  //创建参数class 类型的数组
					Class<?> cla[] = {String.class,int.class};
					Object obj = Reflection(clazz.newInstance(),clazz,"test",cla,"小君",22);
					System.out.println("创建函数完成反射: "+obj);
					
				
				} catch (ClassNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (InstantiationException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (NoSuchMethodException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (SecurityException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IllegalArgumentException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (InvocationTargetException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
 
	}
	
	/*
	 * 通过反射执行cclass的方法
	 * @param   object  ---调到该方法的具体对象
	 * @param   cclass  ---具体对象的class类型
	 * @param   paramClasses ---反射方法中参数class类型
	 * @param   methodName   ---反射方法的名称
	 * @param   args    ----调用该方法用到的具体参数
	 * 
	 * 
	 * */
	public static Object Reflection(Object object ,Class<?> cclass,String methodName,Class<?>[] paramclasses, Object... args) {
		
		try {
			
			Method method = cclass.getMethod(methodName,paramclasses);
			return method.invoke(object,args);
			
			
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return null;
		
	}
 
}
 
    /* 运行结果:
        直接调用length() :17
        java 反射调用length() :17
        直接反射:xiaojun,今年23岁,是一个极富好奇心地乐观青年!
        创建函数完成反射: 小君,今年22岁,是一个极富好奇心地乐观青年!*/
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值