Verkettete Ausnahmen in Java ermöglichen die Verknüpfung einer Ausnahme mit einer anderen, d. h. eine Ausnahme beschreibt die Ursache einer anderen Ausnahme.
- Stellen Sie sich beispielsweise eine Situation vor, in der eine Methode eine auslöst ArithmeticException wegen eines Versuchs, durch Null zu dividieren.
- Die Hauptursache des Fehlers war jedoch ein E/A-Fehler, der dazu führte, dass der Divisor Null war.
- In solchen Fällen helfen verkettete Ausnahmen dabei, sowohl die primäre als auch die zugrunde liegende Fehlerursache zu verbreiten.
Beispiel : Das folgende Beispiel zeigt, wie verkettete Ausnahmen in Java verwendet werden.
Java// Working of chained exceptions public class Geeks { public static void main(String[] args) { try { // Creating an exception NumberFormatException ex = new NumberFormatException('Primary Exception'); // Setting the cause of the exception ex.initCause(new NullPointerException('Root cause of the exception')); // Throwing the exception with a cause throw ex; } catch (NumberFormatException ex) { // Displaying the primary exception System.out.println('Caught Exception: ' + ex); // Displaying the root cause of the exception System.out.println('Cause of Exception: ' + ex.getCause()); } } }
Ausgabe
Caught Exception: java.lang.NumberFormatException: Primary Exception Cause of Exception: java.lang.NullPointerException: Root cause of the exception
Notiz: Verkettete Ausnahmen, auch verschachtelte Ausnahmen genannt, ermöglichen es uns, in Java eine Ursache einer Ausnahme zuzuordnen. Dies ist nützlich, wenn wir Informationen über die ursprüngliche Ursache einer Ausnahme weitergeben möchten.
Konstrukteure
- Throwable (Wurfbare Ursache) : Wobei Ursache die Ausnahme ist, die die aktuelle Ausnahme verursacht.
- Throwable(String msg Throwable Cause) : Wobei „msg“ die Ausnahmemeldung und „cause“ die Ausnahme ist, die die aktuelle Ausnahme verursacht.
Methoden für auslösbare, unterstützende verkettete Ausnahmen
- getCause() : Diese Methode gibt die tatsächliche Ursache einer Ausnahme zurück.
- initCause(Auslösbare Ursache) : Diese Methode legt die Ursache für die aufrufende Ausnahme fest.
Beispiel: Verwenden einer benutzerdefinierten Nachricht mit verketteten Ausnahmen
In Java können wir Ausnahmen mit dem Konstruktor der Throwable-Klasse verketten.
Java// Use a custom message with chained exception public class Geeks { public static void main(String[] args) { try { // Code that might throw an exception int[] n = new int[5]; int divisor = 0; for (int i = 0; i < n.length; i++) { int res = n[i] / divisor; System.out.println(res); } } catch (ArithmeticException e) { // Creating a new exception with // the original as the cause throw new RuntimeException ('Error: Division by zero occurred' e); } } }
Ausgabe:
Federmodule
Erläuterung: In diesem Beispiel ein Array von Ganzzahlen und setzt den Divisor auf 0.
- Im Try-Block wird versucht, jedes Element des Arrays durch 0 zu dividieren, was eine ArithmeticException auslöst.
- Diese ArithmeticException wird im Catch-Block abgefangen, wo eine neue RuntimeException mit der ursprünglichen Ausnahme, d. h. ArithmeticException, als Ursache erstellt wird.
- Da die RuntimeException nicht abgefangen wird, wird der Stack-Trace einschließlich der RuntimeException und der ArithmeticException angezeigt.
Vorteile verketteter Ausnahmen:
Die Vorteile verketteter Ausnahmen sind unten aufgeführt:
- Diese Ausnahme hilft beim Debuggen, indem sie Details zu den Haupt- und Grundursachen bereitstellt.
- Es vereinfacht die Fehlerbehandlung, indem es die Weitergabe des vollständigen Ausnahmekontexts ermöglicht.
- Dies verbessert die Nachvollziehbarkeit von Fehlern in komplexen Anwendungen.
Nachteile verketteter Ausnahmen:
- Bei unsachgemäßer Verwendung kann die Stapelverfolgung länger und schwerer lesbar werden.
- Übermäßiger Gebrauch kann zu verwirrenden Fehlermeldungen führen, wenn Ausnahmen unnötig verkettet werden.
- Entwickler müssen sicherstellen, dass sinnvolle Ursachen verknüpft sind. Andernfalls kann es beim Debuggen zu Irrtümern kommen.