logo

Ланчани изузеци у Јави

Ланчани изузеци у Јави дозвољавају повезивање једног изузетка са другим, тј. један изузетак описује узрок другог изузетка.

  • На пример, размотрите ситуацију у којој метод баца ан АритхметицЕкцептион због покушаја дељења са нулом.
  • Али основни узрок грешке је био И/О квар који је довео до тога да делилац буде нула.
  • У таквим случајевима уланчани изузеци помажу у ширењу и примарних и основних узрока грешке.

Пример : Следећи пример показује како се користе ланчани изузеци у Јави.

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 

Напомена: Ланчани изузеци познати и као угнежђени изузеци омогућавају нам да повежемо узрок са изузетком у Јави. Ово је корисно када желимо да ширимо информације о првобитном узроку изузетка.



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

  • бацити (узрок који се може бацити) : Где је узрок изузетак који изазива тренутни изузетак.
  • Тхровабле (Стринг мсг Тхровабле узрок) : Где је мсг порука о изузетку, а узрок је изузетак који изазива тренутни изузетак.

Методе бацања подршке ланчаним изузецима

  1. гетЦаусе() : Овај метод враћа стварни узрок изузетка.
  2. инитЦаусе (узрок који се може бацити) : Овај метод поставља узрок за позивање изузетка.

Пример: Коришћење прилагођене поруке са ланчаним изузецима

У Јави можемо уланчавати изузетке користећи конструктор класе Тхровабле.

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);  }  } } 

Излаз:

линук бесплатан ипцонфиг
Излаз' title=

Објашњење: У овом примеру низ целих бројева и поставља делилац на 0.

  • Унутар блока три покушава да подели сваки елемент низа са 0 што доводи до изузећа АритхметицЕкцептион.
  • Овај АритхметицЕкцептион је ухваћен у блоку цатцх где се креира нови РунтимеЕкцептион са оригиналним изузетком, тј. АритхметицЕкцептион као узроком.
  • Пошто РунтимеЕкцептион није ухваћен што приказује праћење стека укључујући РунтимеЕкцептион и АритхметицЕкцептион.

Предности ланчаних изузетака:

Предности везаних изузетака су наведене у наставку:

  • Овај изузетак помаже у отклањању грешака пружањем детаља о примарним и основним узроцима.
  • Поједностављује руковање грешкама тако што омогућава ширење комплетног контекста изузетака.
  • Ово побољшава следљивост грешака у сложеним апликацијама.

Недостаци ланчаних изузетака:

  • Ако се не користи правилно, може учинити траг стека дужим и тежим за читање.
  • Прекомерна употреба може изазвати збуњујуће поруке о грешци ако су изузеци непотребно повезани.
  • Програмери морају осигурати да су значајни узроци повезани; иначе може довести у заблуду током отклањања грешака.