00113_通过反射获取成员方法并使用

1、在反射机制中,把类中的成员方法使用类Method表示;

2、通过Class类中提供的方法获取成员方法:

  (1)返回获取一个方法

public Method getMethod(String name, Class<?>... parameterTypes)
获取public 修饰的方法
public Method getDeclaredMethod(String name, Class<?>... parameterTypes)
获取任意的方法,包含私有的
参数1: name 要查找的方法名称; 参数2: parameterTypes 该方法的参数类型

  (2)返回获取多个方法

public Method[] getMethods() 获取本类与父类中所有public 修饰的方法
public Method[] getDeclaredMethods() 获取本类中所有的方法(包含私有的

  (3)代码演示

 1 package cn.gzdlh_01_Reflect;
 2
 3 import java.lang.reflect.Method;
 4
 5 public class MethodDemo {
 6     public static void main(String[] args) throws ClassNotFoundException,
 7             NoSuchMethodException, SecurityException {
 8         // 获取Class对象
 9         Class c = Class.forName("cn.gzdlh_01_Reflect.Person");
10
11         // 获取多个方法
12         // Method[] methods = c.getMethods();
13         Method[] methods = c.getDeclaredMethods();
14         for (Method method : methods) {
15             System.out.println(method);
16         }
17
18         System.out.println("-----------------------");
19         // 获取一个方法:
20         // public void method1()
21         Method method = c.getMethod("method1", null);
22         System.out.println(method);
23         // public String method4(String name){
24         method = c.getMethod("method4", String.class);
25         System.out.println(method);
26         // 私有方法
27         // private void method5()
28         method = c.getDeclaredMethod("method5", null);
29         System.out.println(method);
30     }
31 }

3、通过反射,创建对象,调用指定的方法

  (1)获取成员方法,步骤如下:

    ①获取Class对象;

    ② 获取构造方法;

    ③通过构造方法,创建对象;

    ④获取指定的方法;

    ⑤执行找到的方法。

public Object invoke(Object obj,  Object... args)
执行指定对象obj中,当前Method对象所代表的方法,方法要传入的参数通过args指定

  (2)代码演示

 1 package cn.gzdlh_01_Reflect;
 2
 3 import java.lang.reflect.Constructor;
 4 import java.lang.reflect.InvocationTargetException;
 5 import java.lang.reflect.Method;
 6
 7 public class MethodDemo2 {
 8     public static void main(String[] args) throws ClassNotFoundException,
 9             NoSuchMethodException, SecurityException, InstantiationException,
10             IllegalAccessException, IllegalArgumentException,
11             InvocationTargetException {
12         // 1, 获取Class对象
13         Class c = Class.forName("cn.gzdlh_01_Reflect.Person");
14         // 2,获取构造方法
15         // public Person(String name, int age, String address){
16         Constructor con = c.getConstructor(String.class, int.class,
17                 String.class);
18         // 3,通过构造方法,创建对象
19         Object obj = con.newInstance("gzdlh", 23, "广州");
20         // 4,获取指定的方法
21         // public void method1() 没有返回值没有参数的方法
22         // Method m1 = c.getMethod("method1", null);
23
24         // public String method4(String name)
25         Method m4 = c.getMethod("method4", String.class);
26
27         // 5,执行找到的方法
28         // m1.invoke(obj, null);
29
30         Object result = m4.invoke(obj, "gzdlh");
31         System.out.println("result = " + result);
32     }
33 }

4、通过反射,创建对象,调用指定的private 方法

  (1)获取私有成员方法,步骤如下:

    ①获取Class对象;

    ②获取构造方法;

    ③通过构造方法,创建对象;

    ④获取指定的方法;

    ⑤开启暴力访问;

    ⑥执行找到的方法。

public Object invoke(Object obj,  Object... args)
执行指定对象obj中,当前Method对象所代表的方法,方法要传入的参数通过args指定。

  (2)代码演示

 1 package cn.gzdlh_01_Reflect;
 2
 3 import java.lang.reflect.Constructor;
 4 import java.lang.reflect.InvocationTargetException;
 5 import java.lang.reflect.Method;
 6
 7 public class MethodDemo3 {
 8     public static void main(String[] args) throws ClassNotFoundException,
 9             NoSuchMethodException, SecurityException, InstantiationException,
10             IllegalAccessException, IllegalArgumentException,
11             InvocationTargetException {
12         // 1, 获取Class对象
13         Class c = Class.forName("cn.gzdlh_01_Reflect.Person");
14         // 2,获取构造方法
15         // public Person(String name, int age, String address){
16         Constructor con = c.getConstructor(String.class, int.class,
17                 String.class);
18         // 3,通过构造方法,创建对象
19         Object obj = con.newInstance("gzdlh", 23, "广州");
20         // 4,获取指定的方法
21         // private void method5(){
22         Method m5 = c.getDeclaredMethod("method5", null);
23         // 5,开启暴力访问
24         m5.setAccessible(true);
25         // 6,执行找到的方法
26         m5.invoke(obj, null);
27     }
28 }

在反射机制中,把类中的成员方法使用类Method表示

原文地址:https://www.cnblogs.com/gzdlh/p/8159262.html

时间: 2024-10-06 02:10:46

00113_通过反射获取成员方法并使用的相关文章

反射获取成员方法(Method)

1.1.1 反射公开的非静态的成员方法 Method getDeclaredMethod(String name,Class ... parameterTypes)获取某个方法. 说明: 1)在Class类中提供的getDeclaredMethod方法上接收一个String name,name表示的是需要反射的那个方法的名字. 因为在一个类中可以有多个不同名的方法.在反射的时候需要指定这个方法的名字,同时在一个类中还可能出现方法的重载,这时还需要指定具体反射的是哪个方法参数类型. 3)让反射到的

java 27 - 5 反射之 通过反射获取成员方法并使用

类Method:提供关于类或接口上单独某个方法(以及如何访问该方法)的信息. A:获取所有方法 数组 1.getMethods  获取该类包括其父类的公共成员方法 2.getDeclaredMethods  获取该类的所有的成员方法 B:获取单个方法 1.getMethod 获取该类所有的公共类单个成员方法 2.getDeclaredMethod 获取该类所有类型的单个成员方法 A.1:获取该类包括其父类的公共成员方法 //获取字节码文件 Class c = Class.forName("zl_

反射——获取成员方法

public Method getMethod(String name, Class<?>... parameterTypes)   获取Public修饰的一个方法 public Method getDeclaredMethod(String name, Class<?>... parameterTypes)  获取所有权限的一个方法 public Method[] getMethods()                      本类与父类中所有public 修饰的方法所有方法

java通过反射获取调用变量以及方法

一:反射概念 可以通过Class类获取某个类的成员变量以及方法,并且调用之. 二:通过反射获取方法.变量.构造方法 1 @Test 2 // 通过反射获取类定义的方法 3 public void testMethod() throws Exception { 4 @SuppressWarnings("rawtypes") 5 Class clazz = Class.forName("java.lang.String"); 6 Method[] m = clazz.g

反射-获取程序集的type

反射的基本概念 反射无处不在,我们天天在使用.Vs的智能提示,就是通过反射获取到类的属性.方法等.还有反编译工具也是通过反射实现. 反射:就是动态获取程序集的元数据(提供程序集的类型信息)的功能. Type类实现反射的一个重要的类,通过它我们可以获取类中的所有信息包括方法.属性等.可以动态调用类的属性.方法. 1,Type是对类的描述.如何获取Person类中的所有方法和属性? Person p = new Person(); Type tp = p.GetType();//获取当前实例的类型;

java反射获取对象的属性值和对象属性中的子属性值

近段时间在做web项目,前端使用的是jQuery EasyUI. 为方便需要,准备做一个前端通用的Datagird导出Excel功能,博主也考虑过思路和最终功能,1.前端选中行导出:2.当前页导出:3.当前过滤条件导出. 想偷懒在网上找找已有的代码改改,发现大部分只能满足个别需求,使用JS导出只能满足前端,使用代码才能实现3功能. ...... 好了,说了一堆废话,回归正题,本文是在做通用自定义字段导出时所需要,根据属性名去查找对象和子对象,找到对应属性值,抓取回来放到Excel中. 直接上代码

Android开发之通过反射获取到Android隐藏的方法

在PackageManger中,有些方法被隐藏了,无法直接调用,需要使用反射来获取到该方法. 比如方法:getPackageSizeInfo(),通过这个方法可以获取到apk的CacheSize,CodeSize,DataSize等信息,但是该方法是隐藏的,@hide. 遇到这种情况,需要使用反射: 1 try { 2 //通过反射,获取到PackageManager隐藏的方法getPackageSizeInfo() 3 Method getPackageSizeInfo = PackageMa

通过反射获取常量值

一:通过反射获取常量值,项目中有个需求需要将请求信息封装到javaBean中 但是请求信息比较特殊,需要通过编码去获取,而且编码是定义在接口类中的常量,所以为了方便 特别把这块功能封装起来 1:定义的常量 1 /** 2 * 3 */ 4 package com.hlcui.entity; 5 6 /** 7 * @author Administrator 8 * 9 */ 10 public interface ConstantsUtil { 11 12 public static inter

反射获取成员变量

Field Class.getField(String)方法可以获取类中的指定字段(可见的), 如果是私有的可以用getDeclaedField("name")方法获取,通过set(obj, "李四")方法可以设置指定对象上该字段的值, 如果是私有的需要先调用setAccessible(true)设置访问权限,用获取的指定的字段调用get(obj)可以获取指定对象中该字段的值 import java.lang.reflect.Constructor; import