logo

Ł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 podstawową 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:

zwracanie tablicy Java
Wyjście' title=

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.