理解 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 错误 Java.Net.SocketException: Network Is Unreachable
发布时间:2023/07/16 浏览次数:963 分类:Java
-
今天我们就来讨论一下Java编程时出现java.net.SocketException: Network is unreachable异常的可能原因及解决方法。Java中出现java.net.SocketException: Network is unreachable的可能原因及解决方案
Java 错误 Java.Net.ConnectException: Connection Timed Out
发布时间:2023/07/16 浏览次数:235 分类:Java
-
本篇文章将重点介绍如何使用此包进行基本的网络调用以及可能面临和解决的错误。在 Java 中使用 java.net 进行网络调用 进行网络调用是 Java 开发人员每天面临的最重要的事情之一。
Java 中错误 Attempt to Invoke Virtual Method on a Null Object Reference
发布时间:2023/07/16 浏览次数:948 分类:Java
-
本篇文章介绍如何解决 Java 中的 Attempt to invoke virtual method on a null object reference 错误。Java 中 Attempt to invoke virtual method on a null object reference 错误
Java 错误 Java.Security.InvalidKeyException: Illegal Key Size
发布时间:2023/07/15 浏览次数:644 分类:Java
-
本篇文章介绍包含 java.security.InvalidKeyException: Illegal key size 的 Java 代码。 然后,我们将了解其可能的原因。最后,它通过消除指定的错误来引导我们找到解决方案。
Java 错误 Java.SQL.SQLException: Access Denied for User Root@Localhost
发布时间:2023/07/15 浏览次数:165 分类:Java
-
本篇文章介绍如何解决 Java 中的 java.sql.SQLException: Access Denied for user 'root'@'localhost' 错误。修复 Java 中的 java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
Java 错误 Gateway Process Exited Before Sending Its Port Number
发布时间:2023/07/15 浏览次数:885 分类:Java
-
本篇文章介绍了 Java 中 Java gateway process exited before sending the driver its port number 错误 Java gateway process exited before sending the driver its port number 错误
修复 Java 中 Java.Net.BindException: Address Already in Use: Bind 错误
发布时间:2023/07/15 浏览次数:250 分类:Java
-
本篇文章介绍了 Java 中的 java.net.BindException:Address already in use: Bind 错误。修复Java 中的 java.net.BindException:Address already in use: Bind
Java 中错误 Unsupported Major Minor Version
发布时间:2023/07/14 浏览次数:133 分类:Java
-
出现 Unsupported Major.minor version 错误或 Java.lang.UnsupportedClassVersionError 的原因是运行时 JDK 较低,编译时 JDK 较高。 本篇文章介绍如何解决Java中不支持的major.minor版本。
Java 错误 Error:Java: Javactask: Source Release 1.8 Requires Target Release 1.8
发布时间:2023/07/14 浏览次数:274 分类:Java
-
在使用IntelliJ for Java时,无法编译Java程序是一个常见的问题。 本教程提供了此错误的解决方案。Error:Java: Javactask: Source Release 1.8 Requires Target Release 1.8 错误