java反射调用method.invoke的核心是安全正确地获取method对象并执行:需通过class.forname加载类,用getdeclaredmethod/getmethod获取方法,私有方法须setaccessible(true),注意模块限制;invoke时传入目标实例(静态方法为null)和装箱参数,需分别捕获illegalaccessexception、invocationtargetexception等异常。

Java 反射中通过 Method.invoke 调用未知类的方法,核心在于:先获取 Method 对象,再用目标实例(或 null 对于静态方法)和参数列表执行调用。关键不是“能不能调”,而是“怎么安全、正确地调”。
获取 Method 对象
必须知道类名、方法名、参数类型才能精准定位方法,否则容易抛 NoSuchMethodException。
- 用
Class.forName("全限定类名")加载类(注意类路径和异常) - 调用
getDeclaredMethod("方法名", 参数类型.class...)获取私有方法;用getMethod(...)只能获取 public 方法(含父类继承的) - 若方法重载,参数类型必须严格匹配,比如
int和Integer不等价
处理访问权限
private、protected 方法默认不可访问,需显式设为可访问:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
method.setAccessible(true);—— 绕过 JVM 访问检查(仅限当前反射上下文) - 注意:模块系统(Java 9+)下,若类在未导出/开放的模块中,可能仍抛
InaccessibleObjectException
准备调用参数与目标实例
invoke 方法签名是 Object invoke(Object obj, Object... args):
-
obj是目标实例:非静态方法传具体对象;静态方法传null -
args是参数数组:基本类型需自动装箱(如int→Integer),null 值要确保方法允许 - 若参数个数或类型不匹配,运行时抛
IllegalArgumentException
捕获并处理反射异常
反射调用可能抛出多种异常,不能只 catch Exception:
-
IllegalAccessException:访问权限不足(未调用setAccessible(true)) -
InvocationTargetException:被调方法内部抛出异常,原异常在e.getCause()中 -
NullPointerException:obj为 null 且调用非静态方法 - 建议分别捕获,尤其
InvocationTargetException要解包处理业务异常
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










