InvocationTargetException

2025年3月29日 | 阅读 2 分钟

InvocationTargetException 是一个受检异常,它包含由被调用方法或构造函数抛出的异常。自 JDK 1.4 以来,此异常已被改造,以符合通用的异常链机制。在构造时提供并通过 getTargetException() 方法访问的“目标异常”现在称为原因,可以通过 Throwable.getCause() 方法以及“旧方法”来访问。

简而言之,当我们通过 Method.invoke() 调用一个类时,它会抛出一个异常;该异常会被 java.lang.reflect.InvocationTargetException 类包装。

InvocationTargetException 的原因

InvocationTargetException 主要发生在与 Java 反射 API Java 结合使用时,尝试在反射层调用抛出底层异常本身的方法或构造函数。

反射层包含由默认方法抛出的实际异常。

如何解决 java.lang.reflect.InvocationTargetException

InvocationTargetException 是由被调用方法抛出的异常引起的。底层异常可以通过 getCause() 方法找到。因此,有必要找到实际的异常并解决它,以解决 InvocationTargetException。

InvocationTargetException

请考虑以下示例,该示例故意在 Demo() 方法中生成一个异常(除以零),该方法通过 Method.invoke() 调用。因此,输出将同时抛出 ArithmeticException(除以零)和 InvocationTargetException。

TestInvokationException.java

输出

Wrapper exception: java.lang.reflect.InvocationTargetException
Underlying exception: java.lang.ArithmeticException: / by zero