Verstehen des java.lang.reflect.InvocationTargetException-Fehlers in Java

Suraj P 12 Oktober 2023
  1. der java.lang.reflect.InvocationTargetException-Fehler in Java
  2. Ursachen des Fehlers java.lang.reflect.InvocationTargetException
  3. Beheben Sie den Fehler java.lang.reflect.InvocationTargetException in Java
  4. Abschluss
Verstehen des java.lang.reflect.InvocationTargetException-Fehlers in Java

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.

Autor: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub

Verwandter Artikel - Java Error