java.lang.reflect.Method

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

时间: 2024-10-20 13:11:01

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

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

背景:今天在项目中用到Method 的invoke方法,但是并不理解,查完才知道,原来如此! import java.lang.reflect.Method; /** * Java.lang.reflect.Method invoke方法 实例 * 程序中配置文件中有对实体对象的get,set方法的描述,通过应用invoke()方法调用实体对象的method方法 return * m_oGetter.invoke(oSrc, null); oSrc为实体对象,Method m_oGetter *

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

转: java.lang.reflect.Method.getAnnotation()方法示例 java.lang.reflect.Method.getAnnotation(Class <T> annotationClass)方法如果存在这样的注释,则返回指定类型的元素的注释,否则为null. 声明 以下是java.lang.reflect.Method.getAnnotation(Class <T> annotationClass)方法的声明. public <T exte

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

import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /*2015-10-28*/ public class RefactorDemo { /** * @param args * @throws NoSuchFieldException * @throws SecurityException * @throws Ill

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

前言 Java设计模式9:代理模式一文中,讲到了动态代理,动态代理里面用到了一个类就是java.lang.reflect.Proxy,这个类是根据代理内容为传入的接口生成代理用的.本文就自己写一个Proxy类出来,功能和java.lang.reflect.Proxy一样,传入接口.代理内容,生成代理. 抛砖引玉吧,个人觉得自己写一些JDK里面的那些类挺好的,写一遍和看一遍真的是两个不同的概念,写一遍既加深了对于这些类的理解.提升了自己的写代码水平,也可以在写完之后对比一下自己的实现有哪些写得不好

moon 反射机制---java.lang.reflect包

java反射机制:在运行状态中,对于一个已经加载到JVM的java对象/类 在程序中实现访问.检查.修改.描述java对象本身的信息(构造方法.方法.成员变量.类本身的信息) 这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. C++,Java,C#不是动态语言.但是JAVA有着一个非常突出的动态相关机制:Reflection, 反射是java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接. 二,反射机制的作用:

Java反射API研究(2)——java.lang.reflect详细内容与关系

对于最新的java1.8而言,reflect中接口的结构是这样的: java.lang.reflect.AnnotatedElement java.lang.reflect.AnnotatedType java.lang.reflect.AnnotatedArrayType java.lang.reflect.AnnotatedParameterizedType java.lang.reflect.AnnotatedTypeVariable java.lang.reflect.Annotated

java.lang.reflect.invocationtargetexception

bout Sotirios-Efstathios Maneas Sotirios-Efstathios (Stathis) Maneas is a postgraduate student at the Department of Informatics and Telecommunications of The National and Kapodistrian University of Athens. His main interests include distributed syste

Cglib学习报错 java.lang.reflect.InvocationTargetException--&gt;null

package javacore.testForCglibProxy; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class GetNewBook { public static void main(String[] ar

JAVA中反射机制六(java.lang.reflect包)

一.简介 java.lang.reflect包提供了用于获取类和对象的反射信息的类和接口.反射API允许对程序访问有关加载类的字段,方法和构造函数的信息进行编程访问.它允许在安全限制内使用反射的字段,方法和构造函数对其底层对等进行操作. 二.java.lang.reflect AccessibleObject类 java.lang.reflect.AccessibleObject类是Field,Method和Constructor类对象的基类. 它提供了将反射对象标记为在使用它时抑制默认Java