logo

Верижни изключения в Java

Верижните изключения в Java позволяват свързването на едно изключение с друго, т.е. едно изключение описва причината за друго изключение.

  • Например разгледайте ситуация, в която метод хвърля an ArithmeticException поради опит за деление на нула.
  • Но основната причина за грешката беше входно-изходна грешка, която накара делителя да бъде нула.
  • В такива случаи верижните изключения помагат да се разпространяват както основните, така и основните причини за грешката.

Пример : Следният пример демонстрира как да използвате верижни изключения в 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());  }  } } 

Изход
Caught Exception: java.lang.NumberFormatException: Primary Exception Cause of Exception: java.lang.NullPointerException: Root cause of the exception 

Забележка: Верижните изключения, известни също като вложени изключения, ни позволяват да свържем причина с изключение в Java. Това е полезно, когато искаме да разпространим информация за първоначалната причина за изключение.



Конструктори

  • Throwable (Throwable Причина) : Където причината е изключението, което причинява текущото изключение.
  • Throwable (String msg Throwable Причина) : Където msg е съобщението за изключение, а причината е изключението, което причинява текущото изключение.

Методи за Throwable Поддържащи верижни изключения

  1. getCause() : Този метод връща действителната причина за изключение.
  2. initCause (причина за хвърляне) : Този метод задава причината за извикващото изключение.

Пример: Използване на персонализирано съобщение с верижни изключения

В Java можем да веригираме изключения, като използваме конструктора на класа 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);  }  } } 

Изход:

java как да конвертирате низ в int
Изход' title=

Обяснение: В този пример масив от цели числа и задава делителя на 0.

  • Вътре в блока try се опитва да раздели всеки елемент от масива на 0, което хвърля ArithmeticException.
  • Това ArithmeticException се улавя в блока catch, където се създава ново RuntimeException с оригиналното изключение, т.е. ArithmeticException като негова причина.
  • Тъй като RuntimeException не е уловен, което показва проследяването на стека, включително RuntimeException и ArithmeticException.

Предимства на верижните изключения:

Предимствата на верижните изключения са изброени по-долу:

  • Това изключение помага при отстраняване на грешки, като предоставя подробности както за основните, така и за основните причини.
  • Той опростява обработката на грешки, като позволява разпространението на пълен контекст на изключение.
  • Това подобрява проследимостта на грешките в сложни приложения.

Недостатъци на верижните изключения:

  • Ако не се използва правилно, това може да направи проследяването на стека по-дълго и по-трудно за четене.
  • Прекомерната употреба може да причини объркващи съобщения за грешка, ако изключенията са верижни ненужно.
  • Разработчиците трябва да гарантират, че значимите причини са свързани; в противен случай може да подведе по време на отстраняване на грешки.