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()方法会把它转换为相应的包装类型的对象,再将其返回.

java.lang.reflect.Method的更多相关文章

  1. (转)Java.lang.reflect.Method invoke方法 实例

    背景:今天在项目中用到Method 的invoke方法,但是并不理解,查完才知道,原来如此! import java.lang.reflect.Method; /** * Java.lang.refl ...

  2. java.lang.reflect.Method.getAnnotation()方法示例【通过反射获取到方法对象再获取方法对象上的注解信息】

    转: java.lang.reflect.Method.getAnnotation()方法示例 java.lang.reflect.Method.getAnnotation(Class <T&g ...

  3. java.lang.reflect.Method.getAnnotation()方法示例

    转: java.lang.reflect.Method.getAnnotation()方法示例 作者: 初生不惑 Java技术QQ群:227270512 / Linux QQ群:479429477   ...

  4. 错误: java.lang.reflect.InvocationTargetException

    错误: java.lang.reflect.InvocationTargetException    at sun.reflect.NativeMethodAccessorImpl.invoke0(N ...

  5. 自己写一个java.lang.reflect.Proxy代理的实现

    前言 Java设计模式9:代理模式一文中,讲到了动态代理,动态代理里面用到了一个类就是java.lang.reflect.Proxy,这个类是根据代理内容为传入的接口生成代理用的.本文就自己写一个Pr ...

  6. json解析异常 - net.sf.json.JSONException: java.lang.reflect.InvocationTargetException

    注:在项目中, 我使用原生的ajax请求数据的时候, JSONObject没能帮我解析, 当却不给我报错, 我是在junit单元测试中测试的时候, 发现的.发现好多时候, 特别是通过ajax请求, 不 ...

  7. Caused by: java.lang.NullPointerException, java.lang.reflect.InvocationTargetExc

    java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native M ...

  8. mavne install 报错org.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.InvocationTargetException

    maven install 报错 org.apache.maven.surefire.util.SurefireReflectionException: java.lang.reflect.Invoc ...

  9. java.lang.reflect操作对象属性(域)的值

    package reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.l ...

随机推荐

  1. Jenkins使用FTP进行一键部署及回滚(Windows)

    前提条件: 1.必须有两台服务器,一个是生产环境,另一个是测试环境. 2.两台服务器上都必须安装了Jenkins. 3.其中,生产环境上的Jenkins已经开通的CLI的权限(Windows参考:ht ...

  2. poj2318

    题意:把一个矩形划分成n部分,再给出一堆点,求每个部分内落入了多少点 sol attempt1:暴力 注意每个polygon中的点要按笔画的顺序排列好.还有就是有的点可能落在了upper or low ...

  3. C#12种顺序排序

    这篇主要写关于顺序排序的十二种算法,也是我有关算法的第一帖.主要是写,对每种算法的理解与测试. 速度测试,主要根据一千.一万.五万.百万这 四种.速度纪录还是用Stopwatch 这个类.使用随机数R ...

  4. 软件产品案例分析(K米 APP)

    关于 K米 -- 的案例分析 产品 K米的APP (全国KTV点歌,手机直播,互动,交友,预订)的Android客户端 第一部分 调研,评测 评测: 上手体验 第一次用这一类的软件,之前去KTV的时候 ...

  5. HDU5670Machine(抽象进制)

    有一个机器,它有 m (2\leq m\leq 30)m(2≤m≤30) 个彩灯和一个按钮.每按下按钮时,最右边的彩灯会发生一次变换.变换为: 1. 如果当前状态为红色,它将变成绿色: 2.如果当前状 ...

  6. 【原】React中,map出来的元素添加事件无法使用

    在使用react中,经常用到react的map函数,用法和jquery里中的map一样,但是,如果你在每个map出来的元素中添加,你会发觉添加的事件无法关联, 比如,我们很多的评论,我需要在每个评论下 ...

  7. mysql create db utf8 character

    create database if not exists wifi default character set utf8;

  8. 将一个tabel加到另一个table

    DataTable rate = GetRate(str_catchType,); dt.Merge(rate);//将两个table合并

  9. sudo 出现unable to resolve host 解决方法

    inux 环境, 假设这台机器名字叫dev(机器的hostname), 每次执行sudo 就出现这个警告讯息:sudo: unable to resolve host dev虽然sudo 还是可以正常 ...

  10. emacs最简单入门,只要10分钟

    macs最简单入门,只要10分钟  windwiny @2013    无聊的时候又看到鼓吹emacs的文章,以前也有几次想尝试,结果都是玩不到10分钟就退出删除了. 这次硬着头皮,打开几篇文章都看完 ...