Łańcuchowe wyjątki w Javie

Ł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

  1. getCause() : Ta metoda zwraca rzeczywistą przyczynę wyjątku.
  2. 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:

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.
Sugerowany quiz Edytuj quiz 3 pytania

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

Wyjaśnienie:

Ł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()

Wyjaśnienie:

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

Wyjaśnienie:

Przykład ustawia wyjątek NullPointerException jako przyczynę wyjątku NumberFormatException.

Łańcuchowe wyjątki w JavieQuiz ukończony pomyślnie Twój wynik:   2 /3 Dokładność :  0% Zaloguj się, aby zobaczyć wyjaśnienie 1 /3 1 /3 < Previous Dalej >