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
- getCause() : Tato metoda vrací skutečnou příčinu výjimky.
- 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:
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í.
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
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()
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
Příklad nastavuje výjimku NullPointerException jako příčinu výjimky NumberFormatException.
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ší >