logo

Reťazené výnimky v Jave

Reťazené výnimky v jazyku Java umožňujú priradiť jednu výnimku k inej, t. j. jedna výnimka popisuje príčinu inej výnimky.

  • Uvažujme napríklad o situácii, v ktorej metóda vyhodí an Aritmetická výnimka kvôli pokusu deliť nulou.
  • Ale hlavnou príčinou chyby bolo zlyhanie I/O, ktoré spôsobilo, že deliteľ bol nula.
  • V takýchto prípadoch zreťazené výnimky pomáhajú šíriť primárne aj základné príčiny chyby.

Príklad : Nasledujúci príklad ukazuje, ako používať zreťazené výnimky v jazyku Java.

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: Zreťazené výnimky známe aj ako vnorené výnimky nám umožňujú spojiť príčinu s výnimkou v jazyku Java. Je to užitočné, keď chceme šíriť informácie o pôvodnej príčine výnimky.



Konštruktéri

  • Hodiť sa (príčina odhodenia) : Kde príčina je výnimka, ktorá spôsobuje aktuálnu výnimku.
  • Vhoditeľné (príčina vhadzovania reťazcov) : Kde msg je správa o výnimke a príčina je výnimka, ktorá spôsobuje aktuálnu výnimku.

Metódy vrhateľných podporných reťazených výnimiek

  1. getCause() : Táto metóda vráti skutočnú príčinu výnimky.
  2. initCause (možná príčina) : Táto metóda nastavuje príčinu volania výnimky.

Príklad: Používanie vlastnej správy so zreťazenými výnimkami

V Jave môžeme zreťaziť výnimky pomocou konštruktora triedy 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:

pandy a numpy
Výstup' title=

Vysvetlenie: V tomto príklade pole celých čísel a nastaví deliteľa na 0.

  • Vo vnútri bloku try sa pokúsi vydeliť každý prvok poľa číslom 0, čo vyvolá výnimku ArithmeticException.
  • Táto výnimka ArithmeticException je zachytená v bloku catch, kde sa vytvorí nová výnimka RuntimeException s pôvodnou výnimkou, t. j. ako jej príčinou je výnimka ArithmeticException.
  • Pretože nie je zachytená výnimka RuntimeException, ktorá zobrazuje stopu zásobníka vrátane výnimiek RuntimeException a ArithmeticException.

Výhody zreťazených výnimiek:

Výhody zreťazených výnimiek sú uvedené nižšie:

  • Táto výnimka pomáha pri ladení poskytovaním podrobností o primárnych aj základných príčinách.
  • Zjednodušuje spracovanie chýb tým, že umožňuje šírenie úplného kontextu výnimky.
  • To zlepšuje sledovateľnosť chýb v zložitých aplikáciách.

Nevýhody zreťazených výnimiek:

  • Ak sa nepoužíva správne, môže byť stopa zásobníka dlhšia a ťažšie čitateľná.
  • Nadmerné používanie môže spôsobiť mätúce chybové hlásenia, ak sú výnimky zbytočne reťazené.
  • Vývojári musia zabezpečiť prepojenie zmysluplných príčin; inak môže pri ladení zavádzať.