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

 更新时间:2017年06月05日 08:17:49   投稿:jingxian  
下面小编就为大家带来一篇java反射之方法反射的基本操作方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

本文接上文“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虚拟机管理的内存运行时数据区域

    详解Java虚拟机管理的内存运行时数据区域

    这篇文章主要介绍了详解Java虚拟机管理的内存运行时数据区域的相关资料,需要的朋友可以参考下
    2017-03-03
  • springboot2.6.3读取不到nacos上的配置文件问题

    springboot2.6.3读取不到nacos上的配置文件问题

    这篇文章主要介绍了springboot2.6.3读取不到nacos上的配置文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • jmeter添加自定函数的实例(jmeter5.3+IntelliJ IDEA)

    jmeter添加自定函数的实例(jmeter5.3+IntelliJ IDEA)

    这篇文章主要介绍了jmeter添加自定函数的实例(jmeter5.3+IntelliJ IDEA),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • Intellij IDEA实现SpringBoot项目多端口启动的两种方法

    Intellij IDEA实现SpringBoot项目多端口启动的两种方法

    有时候使用springboot项目时遇到这样一种情况,用一个项目需要复制很多遍进行测试,除了端口号不同以外,没有任何不同。遇到这种情况怎么办呢?这时候可以使用Intellij IDEA解决
    2018-06-06
  • Java高性能缓存框架之Caffeine详解

    Java高性能缓存框架之Caffeine详解

    这篇文章主要介绍了Java高性能缓存框架之Caffeine详解,Caffeine是一个基于Java8的高性能缓存框架,号称趋于完美,Caffeine受启发于Guava Cache的API,使用API和Guava是一致的,需要的朋友可以参考下
    2023-12-12
  • SpringSecurity JWT基于令牌的无状态认证实现

    SpringSecurity JWT基于令牌的无状态认证实现

    Spring Security中实现基于JWT的无状态认证是一种常见的做法,本文就来介绍一下SpringSecurity JWT基于令牌的无状态认证实现,感兴趣的可以了解一下
    2025-04-04
  • iOS socket网络编程实例详解

    iOS socket网络编程实例详解

    socket是一个针对TCP和UDP编程的接口,你可以借助它建立TCP连接等。这篇文章主要介绍了iOS socket网络编程 ,需要的朋友可以参考下
    2017-03-03
  • Spring Boot2.3 新特性分层JAR的使用

    Spring Boot2.3 新特性分层JAR的使用

    这篇文章主要介绍了Spring Boot2.3 新特性分层JAR的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Action访问Servlet的API的简单实例

    Action访问Servlet的API的简单实例

    下面小编就为大家带来一篇Action访问Servlet的API的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-06-06
  • Java开发推荐使用的JDK版本以及对比详细分析

    Java开发推荐使用的JDK版本以及对比详细分析

    这篇文章详细分析了JDK17和JDK21作为当前推荐版本的优缺点,并对比了它们与JDK8和JDK11的差异,文中介绍的非常详细,对大家学习或者使用java具有一定的参考借鉴价值,需要的朋友可以参考下
    2025-04-04

最新评论