Łańcuchowe wyjątki w Javie
Łańcuchowe wyjątki w Javie umożliwiają powiązanie jednego wyjątku z innym, tj. jeden wyjątek opisuje przyczynę innego wyjątku.
- Rozważmy na przykład sytuację, w której metoda zgłasza an Wyjątek arytmetyczny z powodu próby dzielenia przez zero.
- Jednak główną przyczyną błędu była awaria wejścia/wyjścia, która spowodowała, że dzielnik miał wartość zero.
- W takich przypadkach wyjątki łańcuchowe pomagają propagować zarówno pierwotną, jak i podstawową przyczynę błędu.
Przykład : Poniższy przykład ilustruje sposób użycia wyjątków łańcuchowych w Javie.
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 ()); } } }
Wyjście
Caught Exception: java.lang.NumberFormatException: Primary Exception Cause of Exception: java.lang.NullPointerException: Root cause of the exception
Notatka: Łańcuchowe wyjątki, zwane także wyjątkami zagnieżdżonymi, pozwalają nam powiązać przyczynę z wyjątkiem w Javie. Jest to przydatne, gdy chcemy rozpowszechnić informacje o pierwotnej przyczynie wyjątku.
Konstruktorzy
- Możliwość rzucenia (przyczyna, którą można rzucić) : Gdzie przyczyna jest wyjątkiem, który powoduje bieżący wyjątek.
- Throwable (String msg Zgłaszana przyczyna) : Gdzie msg jest komunikatem wyjątku, a przyczyna jest wyjątkiem powodującym bieżący wyjątek.
Metody rzucania obsługujące wyjątki łańcuchowe
- getCause() : Ta metoda zwraca rzeczywistą przyczynę wyjątku.
- initCause (przyczyna, którą można zgłosić) : Ta metoda ustawia przyczynę wyjątku wywołującego.
Przykład: Używanie niestandardowej wiadomości z wyjątkami łańcuchowymi
W Javie możemy łączyć wyjątki za pomocą konstruktora klasy 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 ); } } }
Wyjście:
Wyjaśnienie: W tym przykładzie tablica liczb całkowitych i ustawia dzielnik na 0.
- Wewnątrz bloku try próbuje podzielić każdy element tablicy przez 0, co zgłasza wyjątek ArithmeticException.
- Ten wyjątek ArithmeticException jest przechwytywany w bloku catch, w którym tworzony jest nowy wyjątek RuntimeException z oryginalnym wyjątkiem, tj. ArithmeticException jako przyczyną.
- Ponieważ wyjątek RuntimeException nie został przechwycony, co wyświetla ślad stosu, w tym wyjątek RuntimeException i ArithmeticException.
Zalety łańcuchowych wyjątków:
Poniżej wymieniono zalety łańcuchowych wyjątków:
- Ten wyjątek pomaga w debugowaniu, dostarczając szczegółowe informacje o przyczynach głównych i głównych.
- Upraszcza obsługę błędów, umożliwiając propagację pełnego kontekstu wyjątków.
- Poprawia to identyfikowalność błędów w złożonych aplikacjach.
Wady wyjątków łańcuchowych:
- Jeśli nie zostanie właściwie użyte, może sprawić, że ślad stosu będzie dłuższy i trudniejszy do odczytania.
- Nadużycie może powodować mylące komunikaty o błędach, jeśli wyjątki są niepotrzebnie łączone.
- Deweloperzy muszą zadbać o powiązanie znaczących przyczyn; w przeciwnym razie może wprowadzić w błąd podczas debugowania.
Jaki jest główny cel łańcuchowych wyjątków w Javie?
- A
Aby ukryć główną przyczynę wyjątku
- B
Aby powiązać jeden wyjątek z innym
- C
Aby poprawić wydajność kodu
- D
Aby automatycznie naprawić błędy wykonania
Łańcuchowe wyjątki umożliwiają łączenie jednego wyjątku z innym w celu pokazania głównej przyczyny.
Która metoda jest używana do ustawiania przyczyny wyjątku?
- A
pobierz wiadomość()
- B
ustawwyjątek()
- C
initPrzyczyna()
- D
initPrzyczyna()
Metoda initCause() ustawia podstawową przyczynę wyjątku.
W przykładzie jaki typ wyjątku jest ustawiony jako przyczyna wyjątku NumberFormatException?
- A
Wyjątek IO
- B
Wyjątek arytmetyczny
- C
Wyjątek NullPointer
- D
Wyjątek czasu wykonania
Przykład ustawia wyjątek NullPointerException jako przyczynę wyjątku NumberFormatException.
Quiz ukończony pomyślnie Twój wynik: 2 /3 Dokładność : 0% Zaloguj się, aby zobaczyć wyjaśnienie 1 /3 1 /3 < Previous Dalej >