zoukankan      html  css  js  c++  java
  • java.lang.reflect.Method

    一、Method类是什么
      Method是一个类,位于java.lang.reflect包下。
      在Java反射中 Method类描述的是 类的方法信息,通俗来讲 有一个类如下:

     1 package com.testReflect;
     2 
     3 public class MethodDemo {
     4     private int num = 2;
     5     private String str = "xixi";
     6     
     7     public int addResult(int addNum){
     8         return num + addNum;
     9     }
    10     
    11     @Override
    12     public String toString() {
    13         return "MethodDemo [num=" + num + ", str=" + str + "]";
    14     }
    15 }

      在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类常用方法
      对于类中的方法,我们常用的操作:调用方法。

     1 package com.testReflect;
     2 import java.lang.reflect.Method;
     3 import java.lang.reflect.Modifier;
     4 public class MethodTest {
     5     public static void main(String[] args) throws Exception {
     6         //使用反射第一步:获取操作类MethodDemoFieldDemo所对应的Class对象
     7         Class<?> cls = Class.forName("com.testReflect.MethodDemo");
     8         //使用MethodDemo类的class对象生成 实例
     9         Object obj = cls.newInstance();
    10         
    11         //获取public int addResult(int addNum)方法
    12         Method addMethod = cls.getMethod("addResult", new Class[]{int.class});
    13         System.out.println("修饰符: " + Modifier.toString(addMethod.getModifiers()));
    14         System.out.println("返回值: " + addMethod.getReturnType());
    15         System.out.println("方法名称: " + addMethod.getName());
    16         System.out.println("参数列表: " + addMethod.getParameterTypes());
    17         int result = (int)addMethod.invoke(obj, 2);
    18         System.out.println("调用addResult后的运行结果:" + result);
    19         
    20         System.out.println("--------------------------------");
    21         
    22         //获取public String toString() 方法
    23         Method toStringMethod = cls.getMethod("toString", new Class[]{});
    24         System.out.println("修饰符: " + Modifier.toString(toStringMethod.getModifiers()));
    25         System.out.println("返回值: " + toStringMethod.getReturnType());
    26         System.out.println("方法名称: " + toStringMethod.getName());
    27         System.out.println("参数列表: " + toStringMethod.getParameterTypes());
    28         String msg = (String)toStringMethod.invoke(obj);
    29         System.out.println("调用toString后的运行结果:" + msg);
    30     }
    31 }

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

  • 相关阅读:
    JavaScript的for循环
    javaScript的执行机制-同步任务-异步任务-微任务-宏任务
    js排他性算法
    js倒计时
    微信小程序 简单获取屏幕视口高度
    小程序scroll-view实现回到顶部
    Vue使用js鼠标蜘蛛特效
    小程序获取当前播放长度和视频总长度,可在播放到某一时长暂停或停止视频
    Django学习笔记
    SQLite简单介绍
  • 原文地址:https://www.cnblogs.com/jtlgb/p/8607988.html
Copyright © 2011-2022 走看看