Верижни изключения в 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 Поддържащи верижни изключения
- 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 ); } } }
Изход:
Обяснение: В този пример масив от цели числа и задава делителя на 0.
- Вътре в блока try се опитва да раздели всеки елемент от масива на 0, което хвърля ArithmeticException.
- Това ArithmeticException се улавя в блока catch, където се създава ново RuntimeException с оригиналното изключение, т.е. ArithmeticException като негова причина.
- Тъй като RuntimeException не е уловен, което показва проследяването на стека, включително RuntimeException и ArithmeticException.
Предимства на верижните изключения:
Предимствата на верижните изключения са изброени по-долу:
- Това изключение помага при отстраняване на грешки, като предоставя подробности както за основните, така и за основните причини.
- Той опростява обработката на грешки, като позволява разпространението на пълен контекст на изключение.
- Това подобрява проследимостта на грешките в сложни приложения.
Недостатъци на верижните изключения:
- Ако не се използва правилно, това може да направи проследяването на стека по-дълго и по-трудно за четене.
- Прекомерната употреба може да причини объркващи съобщения за грешка, ако изключенията са верижни ненужно.
- Разработчиците трябва да гарантират, че значимите причини са свързани; в противен случай може да подведе по време на отстраняване на грешки.
Каква е основната цел на верижните изключения в Java?
- А
За да скриете основната причина за изключение
- Б
Да асоциира едно изключение с друго
- В
За подобряване на производителността на кода
- г
За автоматично коригиране на грешки по време на изпълнение
Верижните изключения позволяват свързване на едно изключение с друго, за да се покаже основната причина.
Кой метод се използва за задаване на причината за изключение?
- А
getMessage()
- Б
setException()
- В
initCause()
- г
initCause()
Методът initCause() задава основната причина за изключение.
В примера какъв тип изключение е зададено като причина за NumberFormatException?
- А
IOException
- Б
ArithmeticException
- В
NullPointerException
- г
RuntimeException
Примерът задава NullPointerException като причина за NumberFormatException.
Тестът е завършен успешно Вашият резултат: 2 /3 Точност: 0% Влезте, за да видите обяснението 1 /3 1 /3 < Previous Следващ >