logo

Zřetězené výjimky v Javě

Řetězované výjimky v Javě umožňují přidružit jednu výjimku k jiné, tj. jedna výjimka popisuje příčinu jiné výjimky.

  • Uvažujme například situaci, ve které metoda vyvolá an Aritmetická výjimka kvůli pokusu o dělení nulou.
  • Ale hlavní příčinou chyby bylo selhání I/O, které způsobilo, že dělitel byl nulový.
  • V takových případech zřetězené výjimky pomáhají šířit primární i základní příčiny chyby.

Příklad : Následující příklad ukazuje, jak používat zřetězené výjimky v Javě.

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());  }  } } 

Výstup
Caught Exception: java.lang.NumberFormatException: Primary Exception Cause of Exception: java.lang.NullPointerException: Root cause of the exception 

Poznámka: Zřetězené výjimky známé také jako vnořené výjimky nám umožňují přiřadit příčinu k výjimce v Javě. To je užitečné, když chceme šířit informace o původní příčině výjimky.



Konstruktéři

  • Vhazovatelný (příčina házení) : Kde příčina je výjimka, která způsobuje aktuální výjimku.
  • Vhazovatelné (příčina vhazování řetězcové zprávy) : Kde msg je zpráva o výjimce a příčina je výjimka, která způsobuje aktuální výjimku.

Metody vrhacích podpůrných zřetězených výjimek

  1. getCause() : Tato metoda vrací skutečnou příčinu výjimky.
  2. initCause (možná příčina) : Tato metoda nastavuje příčinu volání výjimky.

Příklad: Použití vlastní zprávy se zřetězenými výjimkami

V Javě můžeme zřetězit výjimky pomocí konstruktoru třídy Throwable.

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);  }  } } 

výstup:

vybrat jako
Výstup' title=

Vysvětlení: V tomto příkladu pole celých čísel a nastaví dělitele na 0.

  • Uvnitř bloku try se pokusí vydělit každý prvek pole 0, což vyvolá výjimku ArithmeticException.
  • Tato výjimka ArithmeticException je zachycena v bloku catch, kde je vytvořena nová výjimka RuntimeException s původní výjimkou, tj. její příčinou je výjimka ArithmeticException.
  • Protože není zachycena výjimka RuntimeException, která zobrazuje trasování zásobníku včetně výjimek RuntimeException a ArithmeticException.

Výhody zřetězených výjimek:

Výhody zřetězených výjimek jsou uvedeny níže:

  • Tato výjimka pomáhá při ladění tím, že poskytuje podrobnosti o primárních i hlavních příčinách.
  • Zjednodušuje zpracování chyb tím, že umožňuje šíření úplného kontextu výjimky.
  • To zlepšuje sledovatelnost chyb ve složitých aplikacích.

Nevýhody zřetězených výjimek:

  • Pokud se nepoužívá správně, může být stopa zásobníku delší a hůře čitelná.
  • Nadměrné používání může způsobit matoucí chybové zprávy, pokud jsou výjimky zbytečně řetězeny.
  • Vývojáři musí zajistit, aby smysluplné příčiny byly propojeny; jinak může být při ladění zavádějící.