Приєднані винятки в 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?
- А
Щоб приховати першопричину винятку
- Б
Пов’язати один виняток з іншим
- C
Щоб покращити продуктивність коду
- Д
Для автоматичного виправлення помилок виконання
Зв’язані винятки дозволяють зв’язувати один виняток з іншим, щоб показати першопричину.
Який метод використовується для встановлення причини виняткової ситуації?
- А
getMessage()
- Б
setException()
- C
initCause()
- Д
initCause()
Метод initCause() встановлює основну причину виняткової ситуації.
У прикладі який тип винятку встановлено як причину NumberFormatException?
- А
IOException
- Б
ArithmeticException
- C
NullPointerException
- Д
RuntimeException
У прикладі встановлюється виняткова ситуація NullPointerException як причина виняткової ситуації NumberFormatException.
Вікторина виконана успішно. Ваш результат: 2 /3 Точність: 0% Увійдіть, щоб переглянути пояснення 1 /3 1 /3 < Previous Далі >