Java如何获取类对象的方法?

在此示例中,我们向您展示如何获取类对象中可用的方法。我们展示了三种获取方法的方法,它们是:

  • Class.getDeclaredMethods()

  • Class.getMethods()

  • Class.getMethod(String, Class<?>...)

package org.nhooo.example.lang;

import java.lang.reflect.Method;

public class GetMethods {
    public static void main(String[] args) {
        GetMethods object = new GetMethods();
        Class clazz = object.getClass();

        // 获取所有声明的方法,包括public,protected,private和
        // 包(默认)访问权限,但不包括继承的方法。
        Method[] methods = clazz.getDeclaredMethods();
        for (Method method : methods) {
            System.out.println("Method name        = " + method.getName());
            System.out.println("Method return type = " + method.getReturnType().getName());

            Class[] paramTypes = method.getParameterTypes();
            for (Class c : paramTypes) {
                System.out.println("Param type         = " + c.getName());
            }

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

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

        //获取所有方法,包括继承的方法。使用getMethods()
        // 我们只能访问公共方法。
        methods = clazz.getMethods();
        for (Method method : methods) {
            System.out.println("Method name        = " + method.getName());
            System.out.println("Method return type = " + method.getReturnType().getName());

            Class[] paramTypes = method.getParameterTypes();
            for (Class c : paramTypes) {
                System.out.println("Param type         = " + c.getName());
            }

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

        try {
            // 我们还可以通过它们的名称和参数类型来获取方法,在这里我们
            // 是tryinh来获取add(int,int)方法。
            Method method = clazz.getMethod("add", new Class[] {int.class,  int.class});
            System.out.println("Method name: " + method.getName());
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }

    public int add(int numberA, int numberB) {
        return numberA + numberB;
    }

    protected int multiply(int numberA, int numberB) {
        return numberA * numberB;
    }

    private double div(int numberA, int numberB) {
        return numberA / numberB;
    }
}