Верижните изключения в 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 Поддържащи верижни изключения
- getCause() : Този метод връща действителната причина за изключение.
- 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
Обяснение: В този пример масив от цели числа и задава делителя на 0.
- Вътре в блока try се опитва да раздели всеки елемент от масива на 0, което хвърля ArithmeticException.
- Това ArithmeticException се улавя в блока catch, където се създава ново RuntimeException с оригиналното изключение, т.е. ArithmeticException като негова причина.
- Тъй като RuntimeException не е уловен, което показва проследяването на стека, включително RuntimeException и ArithmeticException.
Предимства на верижните изключения:
Предимствата на верижните изключения са изброени по-долу:
- Това изключение помага при отстраняване на грешки, като предоставя подробности както за основните, така и за основните причини.
- Той опростява обработката на грешки, като позволява разпространението на пълен контекст на изключение.
- Това подобрява проследимостта на грешките в сложни приложения.
Недостатъци на верижните изключения:
- Ако не се използва правилно, това може да направи проследяването на стека по-дълго и по-трудно за четене.
- Прекомерната употреба може да причини объркващи съобщения за грешка, ако изключенията са верижни ненужно.
- Разработчиците трябва да гарантират, че значимите причини са свързани; в противен случай може да подведе по време на отстраняване на грешки.