Java反射(五)----- 方法的反射

一、 如何获取某个方法

方法的名称和方法的参数列表才能唯一决定某个方法

二、方法的反射操作

method.invoke(对象,参数列表)

方法反射操作的步骤

  1. 获得对象

    A a1 = new A();

  2. 获得对象的类的类类型

    Class c1 = a1.getClass();

  3. 获取方法

    //Method m1 = c1.getMethod(“print”, new Class[]{int.class, int.class});

  4. 利用反射调用方法

    //m1.invoke(a1, new Object[]{1,2});

    Object o1 = m1.invoke(a1, 1, 2);

    下面放上完整的示例代码:

    MethodDemo1.java文件

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

public class MethodDemo1 {
    public static void main(String[] args) {
        //要获取print(int, int)方法 1.要获取一个方法,就是获取类的信息,获取类的信息首先要获取类的类类型
        A a1 = new A();
        Class c1 = a1.getClass();
        /**
         * 获取方法,要提供名称和参数列表
         * getMethod()获取的是public 的方法
         * getDeclareMethod()获取的是自己声明的方法
         * 
         */

        try {
            //Method m1 = c1.getMethod("print", new Class[]{int.class, int.class});
            Method m1 = c1.getMethod("print", int.class, int.class);

            //方法的反射操作是用m对象来进行方法的调用,和a1.print(1,2)调用的效果完全相同
            //m1.invoke(a1, new Object[]{1,2});
            //invoke(对象,参数可变参数)------返回值,有返回值就会赋给o1,没有返回值即为null
            Object o1  = m1.invoke(a1, 1, 2);

            System.out.println("------------------------------------------------------------------------");

            Method m2 = c1.getMethod("print", String.class, String.class);
            Object o2 = m2.invoke(a1, "Hello", "World");
        } 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();
        }

    }

}

class A{
    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());
    }
}
上面的代码中附有详尽的注释,可以结合注释进行理解。

你可能感兴趣的:(java)