Verstehen des java.lang.reflect.InvocationTargetException-Fehlers in Java
-
der
java.lang.reflect.InvocationTargetException
-Fehler in Java -
Ursachen des Fehlers
java.lang.reflect.InvocationTargetException
-
Beheben Sie den Fehler
java.lang.reflect.InvocationTargetException
in Java - Abschluss
In diesem Artikel lernen wir etwas über java.lang.reflect.InvocationTargetException
in Java.
der java.lang.reflect.InvocationTargetException
-Fehler in Java
Die java.lang.reflect.InvocationTargetException
ist eine sehr häufige Ausnahme, wenn ein Entwickler mit der Java Reflection
API arbeitet. Eine geprüfte
Ausnahme enthält eine Ausnahme, die von der aufgerufenen Methode oder einem Konstruktor ausgelöst wird.
Ab Version JDK 1.4,
wurde diese Ausnahme nachgerüstet, um dem Verkettungsmechanismus für allgemeine Ausnahmen zu entsprechen. Kurz gesagt, immer wenn ein Entwickler versucht, eine Klasse mit Method.invoke()
aufzurufen, erhalten wir InvocationTargetException
und es wird von java.lang.reflect.InvocationTargetException
umschlossen.
Ursachen des Fehlers java.lang.reflect.InvocationTargetException
Die InvocationTargetException
tritt hauptsächlich auf, wenn ein Entwickler mit der Reflexionsschicht arbeitet und versucht, einen Konstruktor oder eine Methode aufzurufen, die selbst eine zugrunde liegende Ausnahme auslöst. Die Java-Reflektions-API umschließt also die von der Methode geworfene Ausnahme mit der InvocationTargetException
.
Lassen Sie uns ein Codebeispiel haben, um es besser zu verstehen.
Beispielcode:
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();
}
}
}
Ausgang:
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
Beheben Sie den Fehler java.lang.reflect.InvocationTargetException
in Java
Basierend auf dem oben Gesagten haben wir verstanden, dass die zugrunde liegende Ausnahme der Grund für den Fehler java.lang.reflect.InvocationTargetException
ist. Weitere Informationen über die zugrunde liegende Ausnahme erhalten wir mit der Methode getCause ()
der Klasse Throwable
.
Daher beinhaltet das Lösen der InvocationTargetException
das Finden und Auflösen der zugrunde liegenden Ausnahme.
Beispielcode:
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());
}
}
}
Ausgang:
java.lang.ArithmeticException: / by zero
In der obigen Ausgabe ist die eigentliche zugrunde liegende Ausnahme ArithmeticException
, die auftritt, weil wir durch Null dividieren.
Sobald wir die zugrunde liegende Ausnahme behoben haben, wird auch die InvocationTargetException
aufgelöst. Das Folgende ist der vollständige Arbeitscode ohne Ausnahmen; Wir haben gerade die Division durch Null entfernt.
Vollständiger Quellcode:
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();
}
}
}
Abschluss
In diesem Artikel haben wir gelernt, wie zugrunde liegende Ausnahmen umschlossen werden, wenn wir mit der Reflexionsschicht in Java arbeiten. Wir haben verstanden, wie man die zugrunde liegende Ausnahme beim Arbeiten mit java.lang.reflect.InvocationTargetException
erhält und wie man sie löst.
Verwandter Artikel - Java Error
- Adresse wird bereits verwendet JVM_Bind-Fehler in Java
- Android Java.Lang.IllegalStateException behoben: Methode der Aktivität konnte nicht ausgeführt werden
- Ausnahme im Hauptthread Java.Lang.ClassNotFoundException in IntelliJ IDEA
- Ausnahme im Hauptthread Java.Lang.NoClassDefFoundError
- Beheben Sie das Problem, dass Java nicht installiert werden kann. Es gibt Fehler in den folgenden Schaltern
- Beheben Sie den Fehler `Es wurde keine Java Virtual Machine gefunden` in Eclipse