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
- getCause() : Táto metóda vráti skutočnú príčinu výnimky.
- 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:
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ť.
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
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()
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
Príklad nastavuje výnimku NullPointerException ako príčinu výnimky NumberFormatException.
Kví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 >