import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * @description 本来主要演示了通过反射动态执行类的不同的方法。 * @time 2010-3-2 */ public class ref { public void f1() { System.out.println("this is f1"); } public void f2(String arg0) { System.out.println("this is f2 "+arg0); } /** * @desciption 执行无参数函数 * @param funName 字符串表示的函数名字,比如f1,f2 * @return void * @time 2010-3-2 */ public void exeFWithoutArg(String funName) { try { Method m = this.getClass().getMethod(funName); m.invoke(this); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } /** * @desciption 执行含有一个参数的函数 * @param funName 函数名 * @param arg 函数funName参数 * @return void * @time 2010-3-2 */ public void exeFWithArg(String funName,String arg) { try { Method m = this.getClass().getMethod(funName,arg.getClass()); m.invoke(this,arg); } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } public static void main(String []arg0) { ref f=new ref(); f.exeFWithoutArg("f1"); f.exeFWithArg("f2","hello"); } } /*程序运行后,输出结果为: this is f1 this is f2 hello */