通过反射调用类里面的方法

来源:互联网 发布:甘霖 配餐软件 编辑:程序博客网 时间:2024/05/02 04:28

一般我们调用类的方法,都会直接new一个类的对象,并通过X . XXX()形式进行调用,下面通过反射的方式,用类的类类型进行反射调用该类的方法。

步骤:一、获取类的类类型

            二、通过类类型的getMethod(name, parameterTypes)方法进行获取相应的方法

            三、最后通过invoke(obj, args...)进行方法调用


新建MethodReflect.java

package com.imooc.io;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;public class MethodReflect {public static void main(String[] args){A a = new A();//获取类的类类型Class c = a.getClass();try {/* getMethod获取的是public的方法     * getDelcaredMethod自己声明的方法 * getMethod()方法获取方法,参数第一个是函数名称, * 后面函数是参数(class对象),如没可以不写 *///Method m1 = c.getMethod("print",new Class[]{int.class,int.class});Method m1 = c.getMethod("print",int.class,int.class);//Method m2 = c.getMethod("print", new Class[]{String.class,String.class});Method m2 = c.getMethod("print", String.class,String.class);//Method m3 = c.getMethod("print",new Class[]{});Method m3 = c.getMethod("print");    /* * Metho对象的invoke方法效果相当于A的对象a去调用方法 * 第一个参数要操作的对象,后面是一个Object的对象,没有可以不填             * 方法如果没有返回值返回null,有返回值返回具体的返回值             */    //m1.invoke(a,new Object[]{10,20})m1.invoke(a,10,20);//m2.invoke(a,new Object[]{"abc","ABC"});m2.invoke(a,"abc","ABC");//m3.invoke(a,new Object[]{})m3.invoke(a);} catch (NoSuchMethodException e) {e.printStackTrace();} catch (SecurityException e) {e.printStackTrace();}catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalArgumentException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (InvocationTargetException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static class A{public void print(){System.out.println("hello");}public void print(int a,int b){System.out.println(a+b);}public void print(String a,String b){System.out.println(a.toUpperCase()+b.toLowerCase());}}}

运行结果:

30
ABCabc
hello


0 0
原创粉丝点击