java反射获取对象的方法

news/2024/11/24 9:54:18/

invoke() 方法是 Java 反射机制中一个重要的方法,用于调用已获取的反射对象(如 Method、Constructor)代表的方法或构造函数。

通过 invoke() 方法可以在运行时动态地调用指定对象的方法或创建对象实例。它接受两个参数:第一个参数是方法或构造函数所属的对象(如果是静态方法或构造函数则可以传入 null),第二个参数是方法或构造函数的参数列表。

invoke() 方法的作用类似于直接调用方法或构造函数,但它将在运行时动态确定方法或构造函数的具体实现,并执行相应的操作。这为程序提供了更大的灵活性,并支持一些高级的运行时特性。

下面是示例代码,演示如何使用 invoke() 方法调用一个方法:

import java.lang.reflect.Method;public class Main {public static void main(String[] args) throws Exception {// 获取 Class 对象Class<?> clazz = MyClass.class;// 获取方法对象Method method = clazz.getMethod("hello", String.class);// 创建对象实例Object obj = clazz.getDeclaredConstructor().newInstance();// 调用方法method.invoke(obj, "World");}
}class MyClass {public void hello(String name) {System.out.println("Hello, " + name + "!");}
}

在上述代码中,我们首先通过反射获取了 MyClass 类的 hello 方法的 Method 对象。然后使用 getDeclaredConstructor().newInstance() 创建了该类的对象实例。最后,通过 invoke() 方法调用了 hello 方法,并传入了一个参数 “World”。

通过 invoke() 方法,我们实现了在不知道具体类和方法的情况下,在运行时动态调用方法的目标。这样可以扩展程序的灵活性和可变性。


http://www.ppmy.cn/news/1067122.html

相关文章

【VMware】CentOS 设置静态IP(Windows 宿主机)

文章目录 1. 更改网络适配器设置2. 配置虚拟网络编辑器3. 修改 CentOS 网络配置文件4. ping 测试结果 宿主机&#xff1a;Win11 22H2 虚拟机&#xff1a;CentOS-Stream-9-20230612.0 (Minimal) 1. 更改网络适配器设置 Win R&#xff1a;control 打开控制面板 依次点击&#x…

IPD流程中,CDCP评审的内容、评审标准和评审要素

在IPD&#xff08;Integrated Product Development&#xff09;流程中&#xff0c;CDCP&#xff08;Critical Decision Checkpoint&#xff09;决策评审是一个重要的里程碑评审&#xff0c;用于评估项目在关键决策点上的可行性和风险&#xff0c;以决定是否继续项目的下一阶段。…

Python爬虫网络安全:优劣势和适用范围分析

各位Python程序猿大佬们&#xff01;在当今数字化时代&#xff0c;网络安全是至关重要的。保护你的网络通信安全对于个人和组织来说都是非常重要的任务。在本文中&#xff0c;我将与你一起探讨Python网络安全编程中的代理、虚拟专用网络和TLS这三个关键概念&#xff0c;分析它们…

Leetcode每日一题:1267. 统计参与通信的服务器

原题 这里有一幅服务器分布图&#xff0c;服务器的位置标识在 m * n 的整数矩阵网格 grid 中&#xff0c;1 表示单元格上有服务器&#xff0c;0 表示没有。 如果两台服务器位于同一行或者同一列&#xff0c;我们就认为它们之间可以进行通信。 请你统计并返回能够与至少一台其…

RocketMQ同一topic,多个消费组

RocketMQ同一topic&#xff0c;多个消费组原理 RocketMQ是一款分布式消息队列系统&#xff0c;用于实现高效可靠的消息传递。在RocketMQ中&#xff0c;一个topic可以被多个消费组&#xff08;consumer group&#xff09;订阅。多个消费组可以同时消费同一个topic的消息&#x…

Java的类加载顺序

加载、验证、准备、解析和初始化。 加载 “加载”(Loading)阶段是“类加载”(Class Loading)过程的第一个阶段&#xff0c;在此阶段&#xff0c;虚拟机需要完成以下三件事情&#xff1a; 通过一个类的全限定名来获取定义此类的二进制字节流。将这个字节流所代表的静态存储结构…

【Go 基础篇】切片:Go语言中的灵活数据结构

在Go语言中&#xff0c;切片&#xff08;Slice&#xff09;是一种强大且灵活的数据结构&#xff0c;用于管理和操作一系列元素。与数组相比&#xff0c;切片的大小可以动态调整&#xff0c;这使得它成为处理动态数据集合的理想选择。本文将围绕Go语言中切片的引入&#xff0c;介…

C语言巧用联合体union判定数据的存储格式(大小端)

联合体大家可能比较陌生&#xff0c;但是大家对结构体稍微熟悉一点吧。其实它们二个类似&#xff0c;只不过结构体成员占用不同的地址&#xff0c;而联合体所有成员占用相同地址。利用这个特性我们就能判断在当前编译器下存储的数据的格式。那么如何确定呢&#xff1f; 我这里…