Loading

8.动态调用类中的方法

根据上一节类比,我们很容易知道,如果想要用反射操作某个对象的方法,那么Method对象是必不可少的。

首先我们要获得Class对象的Method对象,然后调用:

//此方法用与获得Class的指定名称和参数类型的方法对象
getDeclaredMethod(String name, Class<?>... parameterTypes);
//此方法可以调用某对象的方法,入参是后面的args组成的不可变参数(obj是此类的实例化对象)
invoke(Object obj,Object ...args);

实例学习

package ReflectStudy.Exa8;
import java.lang.reflect.Method;
/**
 * 通过反射调用对象的方法
 */
public class MethodTest {
    public static void main(String[] args) {
        try {
            System.out.println("通过反射调用Math类的静态方法sin()");
            //获得Math中名为sin,返回参数为Double的方法对象
            Method sin = Math.class.getDeclaredMethod("sin", Double.TYPE);
            //对于静态方法,前面的obj可以为null
            Double sin1 = (Double) sin.invoke(null, 1);
            System.out.println(Math.sin(1));
            System.out.println("1的正弦值是:" + sin1);

            System.out.println("通过反射调用String类的非静态方法equals()");
            Method equalsMethod = String.class.getDeclaredMethod("equals", Object.class);
            Boolean flag = (Boolean) equalsMethod.invoke(new String("麻子"), "四郎");
            System.out.println("麻子:" + flag);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行之:

在这里插入图片描述

https://gitee.com/yan-jiadou/study/tree/master/Java%E5%8A%A8%E6%89%8B%E5%81%9A%E4%B8%80%E5%81%9A/src/main/java/ReflectStudy

posted @ 2021-11-26 20:36  文牧之  阅读(18)  评论(0)    收藏  举报  来源