Java反射调用方法的核心是通过Class获取Method对象后调用invoke(),需注意:1.用getMethod()查public方法(含父类),getDeclaredMethod()查本类所有方法(含private);2.参数类型必须精确匹配;3.private方法需setAccessible(true);4.invoke()第一个参数为对象实例(静态方法传null),异常被包装为InvocationTargetException。
Java反射调用方法,核心是通过 Class 获取目标类的 Method 对象,再用 invoke() 执行。关键在于正确获取方法(考虑重载、访问权限)、处理参数类型匹配和异常。
用 getDeclaredMethod() 或 getMethod() 获取方法引用:
getMethod("methodName", paramTypes...) 只找 public 方法(含父类)
getDeclaredMethod("methodName", paramTypes...) 找本类所有方法(含 private/protected)
,但不查父类
String.class 不能写成 Object.class,否则抛 NoSuchMethodException
print(String) 和 print(int) 是两个不同 Method对非 public 方法,需显式设为可访问:
method.setAccessible(true),跳过 JVM 访问检查module-info.java 中声明 opens 或使用 --add-opens JVM 参数method.invoke(obj, args...) 执行方法:
null 表示静态方法)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"基本上就这些。不复杂但容易忽略参数类型和访问控制细节。