Reťazené výnimky v Jave

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 nulový.
  • 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:

Výstup

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ť.
Navrhovaný kvíz Upraviť kvíz 3 otázky

Aký je hlavný účel reťazených výnimiek v jazyku Java?

  • A

    Ak chcete skryť hlavnú príčinu výnimky

  • B

    Spojiť jednu výnimku s druhou

  • C

    Na zlepšenie výkonu kódu

  • D

    Automaticky opraviť chyby spustenia

Vysvetlenie:

Zreťazené výnimky umožňujú prepojiť jednu výnimku s druhou, aby sa ukázala hlavná príčina.

Ktorá metóda sa používa na nastavenie príčiny výnimky?

  • A

    getMessage()

  • B

    setException()

  • C

    initCause()

  • D

    initCause()

Vysvetlenie:

Metóda initCause() nastavuje základnú príčinu výnimky.

Aký typ výnimky je v príklade nastavený ako príčina NumberFormatException?

  • A

    IOException

  • B

    Aritmetická výnimka

  • C

    Výnimka NullPointerException

  • D

    RuntimeException

Vysvetlenie:

Príklad nastavuje výnimku NullPointerException ako príčinu výnimky NumberFormatException.

Reťazené výnimky v JaveKvíz úspešne dokončený Vaše skóre:   2 /3 Presnosť:  0% Prihláste sa na zobrazenie vysvetlenia 1 /3 1 /3 < Previous Ďalej >