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

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:

Výstup

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í.
Doporučený kvíz Upravit kvíz 3 Otázky

Jaký je hlavní účel zřetězených výjimek v Javě?

  • A

    Chcete-li skrýt hlavní příčinu výjimky

  • B

    Spojování jedné výjimky s druhou

  • C

    Chcete-li zlepšit výkon kódu

  • D

    Chcete-li automaticky opravit chyby za běhu

Vysvětlení:

Zřetězené výjimky umožňují propojit jednu výjimku s jinou, aby se ukázala hlavní příčina.

Která metoda se používá k nastavení příčiny výjimky?

  • A

    getMessage()

  • B

    setException()

  • C

    initCause()

  • D

    initCause()

Vysvětlení:

Metoda initCause() nastavuje základní příčinu výjimky.

Jaký typ výjimky je v příkladu nastaven jako příčina NumberFormatException?

  • A

    IOException

  • B

    Aritmetická výjimka

  • C

    Výjimka NullPointerException

  • D

    RuntimeException

Vysvětlení:

Příklad nastavuje výjimku NullPointerException jako příčinu výjimky NumberFormatException.

Zřetězené výjimky v JavěKvíz úspěšně dokončen Vaše skóre:   2 /3 Přesnost:  0 % Pro zobrazení vysvětlení se přihlaste 1 /3 1 /3 < Previous Další >