Приєднані винятки в Java

Приєднані винятки в 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  );      }      }   }   

Вихід:

Вихід

Пояснення: У цьому прикладі масив цілих чисел і встановлює дільник на 0.

  • Усередині блоку try він намагається розділити кожен елемент масиву на 0, що викликає ArithmeticException.
  • Ця виняткова ситуація ArithmeticException перехоплюється в блок catch, де створюється нова виняткова ситуація RuntimeException із початковою винятковою ситуацією, тобто ArithmeticException як її причина.
  • Оскільки RuntimeException не перехоплюється, відображається трасування стека, включаючи RuntimeException і ArithmeticException.

Переваги зв'язаних винятків:

Нижче наведено переваги зв’язаних винятків:

  • Цей виняток допомагає в налагодженні, надаючи докладні відомості про основні та основні причини.
  • Це спрощує обробку помилок, дозволяючи розповсюджувати повний контекст виняткової ситуації.
  • Це покращує відстеження помилок у складних програмах.

Недоліки ланцюгових винятків:

  • Якщо не використовувати належним чином, трасування стека може стати довшим і важчим для читання.
  • Надмірне використання може призвести до незрозумілих повідомлень про помилки, якщо винятки непотрібно зв’язуються.
  • Розробники повинні переконатися, що вагомі причини пов’язані між собою; інакше це може ввести в оману під час налагодження.
Запропонована вікторина Редагувати вікторину 3 запитання

Яка основна мета ланцюжкових винятків у Java?

  • А

    Щоб приховати першопричину винятку

  • Б

    Пов’язати один виняток з іншим

  • C

    Щоб покращити продуктивність коду

  • Д

    Для автоматичного виправлення помилок виконання

Пояснення:

Зв’язані винятки дозволяють зв’язувати один виняток з іншим, щоб показати першопричину.

Який метод використовується для встановлення причини виняткової ситуації?

  • А

    getMessage()

  • Б

    setException()

  • C

    initCause()

  • Д

    initCause()

Пояснення:

Метод initCause() встановлює основну причину виняткової ситуації.

У прикладі який тип винятку встановлено як причину NumberFormatException?

  • А

    IOException

  • Б

    ArithmeticException

  • C

    NullPointerException

  • Д

    RuntimeException

Пояснення:

У прикладі встановлюється виняткова ситуація NullPointerException як причина виняткової ситуації NumberFormatException.

Приєднані винятки в JavaВікторина виконана успішно. Ваш результат:   2 /3 Точність:  0% Увійдіть, щоб переглянути пояснення 1 /3 1 /3 < Previous Далі >