05
2019
04

java.lang.reflect.Method

一、Method类是什么

  Method是一个类,位于java.lang.reflect包下。

  在Java反射中 Method类描述的是 类的方法信息,通俗来讲 有一个类如下:

package com.testReflect;

public class MethodDemo {
    private int num = 2;
    private String str = "xixi";
    
    public int addResult(int addNum){
        return num + addNum;
    }
    
    @Override
    public String toString() {
        return "MethodDemo [num=" + num + ", str=" + str + "]";
    }
}

  在Java反射中MethodDemo类中的方法addResult(int addNum)、toString()都是Method类的实例,这个Method类的实例描述了方法的全部信息。(包括:方法修饰符、方法名称、参数列表 等等)

二、如何获取Method类对象

  一共有4种方法,全部都在Class类中:

    - getMethods(): 获得类的public类型的方法

    - getMethod(String name, Class[] params): 获得类的特定方法,name参数指定方法的名字,params参数指定方法的参数类型

    - getDeclaredMethods(): 获取类中所有的方法(public、protected、default、private)

    - getDeclaredMethod(String name, Class[] params): 获得类的特定方法,name参数指定方法的名字,params参数指定方法的参数类型

三、Method类常用方法

  对于类中的方法,我们常用的操作:调用方法。

package com.testReflect;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class MethodTest {
    public static void main(String[] args) throws Exception {
        //使用反射第一步:获取操作类MethodDemoFieldDemo所对应的Class对象
        Class<?> cls = Class.forName("com.testReflect.MethodDemo");
        //使用MethodDemo类的class对象生成 实例
        Object obj = cls.newInstance();
        
        //获取public int addResult(int addNum)方法
        Method addMethod = cls.getMethod("addResult", new Class[]{int.class});
        System.out.println("修饰符: " + Modifier.toString(addMethod.getModifiers()));
        System.out.println("返回值: " + addMethod.getReturnType());
        System.out.println("方法名称: " + addMethod.getName());
        System.out.println("参数列表: " + addMethod.getParameterTypes());
        int result = (int)addMethod.invoke(obj, 2);
        System.out.println("调用addResult后的运行结果:" + result);
        
        System.out.println("--------------------------------");
        
        //获取public String toString() 方法
        Method toStringMethod = cls.getMethod("toString", new Class[]{});
        System.out.println("修饰符: " + Modifier.toString(toStringMethod.getModifiers()));
        System.out.println("返回值: " + toStringMethod.getReturnType());
        System.out.println("方法名称: " + toStringMethod.getName());
        System.out.println("参数列表: " + toStringMethod.getParameterTypes());
        String msg = (String)toStringMethod.invoke(obj);
        System.out.println("调用toString后的运行结果:" + msg);
    }
}

Method类的invoke(Object obj,Object args[])方法接收的参数必须为对象,如果参数为基本类型数据,必须转换为相应的包装类型的对象。invoke()方法的返回值总是对象,如果实际被调用的方法的返回类型是基本类型数据,那么invoke()方法会把它转换为相应的包装类型的对象,再将其返回。

原文链接:https://www.qiquanji.com/post/8441.html

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

gzh

微信扫码关注

更新实时通知

« 上一篇 下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。