理解 Java 中的 java.lang.reflect.InvocationTargetException 错误
在本文中,我们将了解 Java 中的 java.lang.reflect.InitationTargetException。
Java 中的 java.lang.reflect.InitationTargetException 错误
当开发人员使用 Java Reflection API 时,java.lang.reflect.InitationTargetException
是一个非常常见的异常。 检查的异常保存由调用的方法或构造函数抛出的异常。
从 JDK 1.4 版本开始,该异常已被改进以符合通用异常链机制。 简而言之,每当开发人员尝试使用 Method.invoke()
调用一个类时,我们都会收到 InvocableTargetException ,并且它被 java.lang.reflect.InvokeTargetException
包裹。
java.lang.reflect.InvocableTargetException错误的原因
IncationTargetException 主要发生在开发人员使用反射层并尝试调用本身引发底层异常的构造函数或方法时。 因此,Java 反射 API 将方法抛出的异常包装为 InvoicationTargetException。
让我们看一个代码示例来更好地理解它。
示例代码:
import java.lang.reflect.*;
public class Test {
public int divideByZero() {
return 89/ 0;
}
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException {
Test obj = new Test();
Method method = Test.class.getMethod("divideByZero");
try {
method.invoke(obj);
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
输出:
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at Test.main(Test.java:13)
Caused by: java.lang.ArithmeticException: / by zero
at Test.divideByZero(Test.java:6)
... 5 more
修复 Java 中的 java.lang.reflect.InitationTargetException 错误
根据上面的内容,我们了解到底层异常是导致 java.lang.reflect.InitationTargetException
错误的原因。 我们可以使用 Throwable 类的 getCause()
方法获取有关底层异常的更多信息。
因此,解决 IncationTargetException 涉及查找并解决底层异常。
示例代码:
import java.lang.reflect.*;
public class Test {
public int divideByZero() {
return 89/ 0;
}
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException
{
Test obj = new Test();
Method method = Test.class.getMethod("divideByZero");
try {
method.invoke(obj);
}
catch (InvocationTargetException e)
{
System.out.println(e.getCause());
}
}
}
输出:
java.lang.ArithmeticException: / by zero
在上面的输出中,实际的底层异常是 ArithmeticException,因为我们除以零而发生。
一旦我们修复了底层异常,InitationTargetException 也得到了解决。 以下是完整的工作代码,无一例外; 我们刚刚删除了除以零的部分。
完整源代码:
import java.lang.reflect.*;
public class Test {
public int divideByZero() {
return 89/ 9;
}
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException
{
Test obj = new Test();
Method method = Test.class.getMethod("divideByZero");
try {
method.invoke(obj);
}
catch (InvocationTargetException e)
{
e.printStackTrace();
}
}
}
总结
在本文中,我们了解了在 Java 中使用反射层时如何包装底层异常。 我们了解了在使用 java.lang.reflect.InitationTargetException
时如何获取底层异常以及如何解决它。
相关文章
Java 中 ExceptionInInitializer 错误
发布时间:2023/07/10 浏览次数:121 分类:Java
-
在这篇文章中,我们将了解Java中的 ExceptionInInitializerError。Java中 ExceptionInInitializerError 简介 ExceptionInInitializerError 是 Java 中的未经检查的异常,它是 Error 类的子类。 它属于运行时异常的类别。
Java 中 GC Overhead Limit Exceeded 错误
发布时间:2023/07/10 浏览次数:127 分类:Java
-
本文将讨论 Java 中的 GC 开销超出限制错误。Java中GC Overhead Limit Exceeded错误简介 在Java中,当程序不再使用对象时,JVM(Java虚拟机)会释放内存。
Java 中的纸牌洗牌
发布时间:2023/05/16 浏览次数:73 分类:Java
-
本文介绍如何在 Java 中洗一副牌。使用 Java 中的传统循环打乱 ArrayList。类似地,在 Java 中,各种方法允许用户随机播放元素。下面是演示此过程的代码块。
Java 中将列表转换为 ArrayList
发布时间:2023/05/16 浏览次数:156 分类:Java
-
在 Java 中将 List 转换为 ArrayList 的方法。在本篇文章中,我们讨论了如何在 Java 中将列表转换为 ArrayList。
Java 中 ArrayList 和 LinkedList 的区别
发布时间:2023/05/16 浏览次数:126 分类:Java
-
本文介绍 Java 中 ArrayList 和 LinkedList 的区别。ArrayList 和 LinkedList 都用于存储数据,但由于实现类型的不同而存在一些差异。
在 Java 中将 ArrayList 转换为 Set
发布时间:2023/05/16 浏览次数:193 分类:Java
-
本文介绍 Java 中 ArrayList 到 Set 的转换。ArrayList 是 List 接口的实现类,用于以线性顺序存储数据,而 set 是具有 HashSet 类来存储数据的接口。
在 Java 中将 ArrayList 转换为 Int 数组
发布时间:2023/05/16 浏览次数:99 分类:Java
-
本文讨论了在 Java 中将 ArrayList 转换为 int Array 的四种方法。使用 for 循环将 Arraylist 转换为 Int 数组; 使用 Object[] toArray() 函数将 Arraylist 转换为 Int 数组
Java 中比较 ArrayList
发布时间:2023/05/16 浏览次数:144 分类:Java
-
在本教程中,首先,我们将使用 Java 中的比较方法比较两个数组列表。在将其应用于数组列表之前,我们还将相同的方法应用于 Java 字符串。最后,我们演示了如何在比较之前对无序列
在 Java 中使用 ArrayList 进行合并排序
发布时间:2023/05/16 浏览次数:164 分类:Java
-
本文介绍了在 Java 中使用 ArrayList 实现归并排序的步骤。本教程介绍了在 Java 中使用 ArrayList 执行合并排序所需的步骤。合并排序使用分治法对数组或 ArrayList 中的项目进行排序。