java反射学习笔记(3)----使用反射来调用方法

来源:互联网 发布:postgresql mysql 电商 编辑:程序博客网 时间:2024/06/07 20:22
我们在类中调用方法的时候,一般都是,先实例化一个具体的对象,然后用这个对象来调用具体的函数方法,而我们说的利用反射来调用方法,是用函数方法对象来调用具体的对象。

1、getMethod(“方法名”,参数类型的类类型)

我们要获得一个方法的话,首先要获得一个类的类类型,之后再用类类型来getMethod方法来获得具体的方法,这个方法的返回值是一个Method对象。

2、invoke方法

该方法由Method对象来调用,具体格式:method.invoke(a1,方法参数);

3、 具体代码实现

package com.imooc.reflect;import java.lang.reflect.Method;public class MethodDemo1 {    public static void main(String[] args) {       //要获取print(int ,int )方法  1.要获取一个方法就是获取类的信息,获取类的信息首先要获取类的类类型        A a1 = new A();        Class c = a1.getClass();        /*         * 2.获取方法 名称和参数列表来决定           * getMethod获取的是public的方法         * getDelcaredMethod自己声明的方法         */        try {            //Method m =  c.getMethod("print", new Class[]{int.class,int.class});            Method m = c.getMethod("print", int.class,int.class);            //方法的反射操作              //a1.print(10, 20);方法的反射操作是用m对象来进行方法调用 和a1.print调用的效果完全相同            //方法如果没有返回值返回null,有返回值返回具体的返回值            //Object o = m.invoke(a1,new Object[]{10,20});            Object o = m.invoke(a1, 10,20);            System.out.println("==================");            //获取方法print(String,String)             Method m1 = c.getMethod("print",String.class,String.class);             //用方法进行反射操作             //a1.print("hello", "WORLD");             o = m1.invoke(a1, "hello","WORLD");             System.out.println("===================");           //  Method m2 = c.getMethod("print", new Class[]{});                Method m2 = c.getMethod("print");               // m2.invoke(a1, new Object[]{});                m2.invoke(a1);        } catch (Exception e) {            // TODO Auto-generated catch block            e.printStackTrace();        }     }}class A{    public void print(){        System.out.println("helloworld");    }    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());    }}