java反射之方法反射的基本操作方法

作者:jingxian 时间:2021-11-26 00:45:36 

本文接上文“java反射之获取类的信息方法(推荐)”,利用反射(invoke)来获取一个类中的方法来执行。

1、定义一个类,包含三个名称相同,参数不同的方法


class A{
 public void print(){
   System.out.println("Hello,World");
 }

public void print(int a,int b){
   System.out.println(a+b);
 }
 public void print(String a,String b){
   System.out.println(a.toUpperCase()+","+b.toLowerCase());
 }
}

2、利用方法的反射(invoke)分别获取该类三个方法并执行


public class Test {
 public static void main(String[] args) {
   /**
    * 获取print(int,int)方法
    * 1、获取类的类类型
    */
   A a1 = new A();
   Class clazz = a1.getClass();
   /**
    * 2、获取方法(名称、参数列表)
    * getMethod()获取的是public方法
    * getDeclaredMethod()获取的是自己声明的方法
    */
   try {
//      Method m = clazz.getMethod("print",new Class[]{int.class,int.class});
     Method m = clazz.getMethod("print", int.class, int.class);
     //方法的反射操作,用m对象进行方法调用,a1.print完全相同
     //方法没有返回值返回null,有返回值返回具体的返回值
//      Object obj = m.invoke(a1,new Object[]{10,20});
     Object obj = m.invoke(a1,10,20);

System.out.println("================================================");

Method m2 = clazz.getMethod("print", String.class, String.class);
     m2.invoke(a1,"aaa","BBB");

System.out.println("================================================");

Method m3 = clazz.getMethod("print");
     m3.invoke(a1);
   } catch (Exception e) {
     e.printStackTrace();
   }
 }
}

3、完整代码


package com.format.test;

import java.lang.reflect.Method;

/**
* Created by Format on 2017/6/3.
*/
public class Test {
 public static void main(String[] args) {
   /**
    * 获取print(int,int)方法
    * 1、获取类的类类型
    */
   A a1 = new A();
   Class clazz = a1.getClass();
   /**
    * 2、获取方法(名称、参数列表)
    * getMethod()获取的是public方法
    * getDeclaredMethod()获取的是自己声明的方法
    */
   try {
//      Method m = clazz.getMethod("print",new Class[]{int.class,int.class});
     Method m = clazz.getMethod("print", int.class, int.class);
     //方法的反射操作,用m对象进行方法调用,a1.print完全相同
     //方法没有返回值返回null,有返回值返回具体的返回值
//      Object obj = m.invoke(a1,new Object[]{10,20});
     Object obj = m.invoke(a1,10,20);

System.out.println("================================================");

Method m2 = clazz.getMethod("print", String.class, String.class);
     m2.invoke(a1,"aaa","BBB");

System.out.println("================================================");

Method m3 = clazz.getMethod("print");
     m3.invoke(a1);
   } catch (Exception e) {
     e.printStackTrace();
   }
 }
}

class A{
 public void print(){
   System.out.println("Hello,World");
 }

public void print(int a,int b){
   System.out.println(a+b);
 }
 public void print(String a,String b){
   System.out.println(a.toUpperCase()+","+b.toLowerCase());
 }
}

4、执行结果

java反射之方法反射的基本操作方法

标签:java,反射,方法
0
投稿

猜你喜欢

  • MapTask工作机制图文详解

    2021-12-13 11:03:27
  • Java实现三子棋小游戏

    2022-09-12 01:27:20
  • android Gallery组件实现的iPhone图片滑动效果实例

    2022-09-27 06:38:17
  • 用Java设计模式中的观察者模式开发微信公众号的例子

    2023-01-17 05:30:58
  • C#泛型委托的用法实例分析

    2021-09-16 23:29:52
  • SpringBoot中shiro过滤器的重写与配置详解

    2021-07-28 23:40:09
  • 解决Java调用BAT批处理不弹出cmd窗口的方法分析

    2022-03-09 17:34:02
  • 一篇文章带你Java Spring开发入门

    2021-06-25 10:04:15
  • Java注解方式之防止重复请求

    2023-05-29 16:30:51
  • Spring Cloud之服务监控turbine的示例

    2023-04-20 23:26:44
  • Python安装Jupyter Notebook配置使用教程详解

    2023-08-31 02:52:03
  • Java自定义注解用法实例小结

    2023-03-26 09:13:51
  • 深入分析C# Task

    2022-10-24 12:39:00
  • Android模块化中数据传递/路由跳转实现示例

    2023-06-29 03:12:06
  • java 文件上传到读取文件内容的实例

    2023-11-09 22:00:27
  • SpringBoot实现文件上传与下载功能的示例代码

    2021-11-10 09:15:32
  • Javaweb会话跟踪技术Cookie和Session的具体使用

    2022-06-24 21:16:33
  • Spring Boot示例分析讲解自动化装配机制核心注解

    2022-07-26 15:56:14
  • SpringBoot全局Controller返回值格式统一

    2022-09-12 14:07:52
  • idea如何配置javafxsdk详细教程

    2023-11-24 22:04:16
  • asp之家 软件编程 m.aspxhome.com