Java反射调用方法全解析
时间:2026-02-10 12:43:34 227浏览 收藏
怎么入门文章编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《Java反射调用方法详解》,涉及到,有需要的可以收藏一下
Java反射调用方法的核心是通过Class获取Method对象后调用invoke(),需注意:1.用getMethod()查public方法(含父类),getDeclaredMethod()查本类所有方法(含private);2.参数类型必须精确匹配;3.private方法需setAccessible(true);4.invoke()第一个参数为对象实例(静态方法传null),异常被包装为InvocationTargetException。

Java反射调用方法,核心是通过 Class 获取目标类的 Method 对象,再用 invoke() 执行。关键在于正确获取方法(考虑重载、访问权限)、处理参数类型匹配和异常。
获取 Method 对象
用 getDeclaredMethod() 或 getMethod() 获取方法引用:
getMethod("methodName", paramTypes...)只找 public 方法(含父类)getDeclaredMethod("methodName", paramTypes...)找本类所有方法(含 private/protected),但不查父类- 参数类型必须精确匹配——
String.class不能写成Object.class,否则抛NoSuchMethodException - 重载方法靠参数类型区分,比如
print(String)和print(int)是两个不同 Method
设置可访问性(尤其 private 方法)
对非 public 方法,需显式设为可访问:
- 调用
method.setAccessible(true),跳过 JVM 访问检查 - 该操作在模块化(Java 9+)环境下可能受模块限制,需在
module-info.java中声明opens或使用--add-opensJVM 参数
执行 invoke() 调用
method.invoke(obj, args...) 执行方法:
- 第一个参数是目标对象(
null表示静态方法) - 后续参数按顺序传入,类型自动装箱/拆箱(如 int ↔ Integer),但不能跨继承层级强转(如传
ArrayList给要求List的参数通常可以,但传String给Number就不行) - 抛出的异常会被包装进
InvocationTargetException,需用e.getCause()获取原始异常
完整小例子
假设有类:class Demo { private String hello(String s) { return "Hi, " + s; } }
反射调用它:
Class> clazz = Demo.class;Method m = clazz.getDeclaredMethod("hello", String.class);m.setAccessible(true);Object result = m.invoke(new Demo(), "world"); // 返回 "Hi, world"
基本上就这些。不复杂但容易忽略参数类型和访问控制细节。
好了,本文到此结束,带大家了解了《Java反射调用方法全解析》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多文章知识!
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
501 收藏
-
315 收藏
-
237 收藏
-
150 收藏
-
453 收藏
-
316 收藏
-
434 收藏
-
278 收藏
-
299 收藏
-
501 收藏
-
276 收藏
-
133 收藏
-
181 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 485次学习