Ланчани изузеци у Јави дозвољавају повезивање једног изузетка са другим, тј. један изузетак описује узрок другог изузетка.
- На пример, размотрите ситуацију у којој метод баца ан АритхметицЕкцептион због покушаја дељења са нулом.
- Али основни узрок грешке је био И/О квар који је довео до тога да делилац буде нула.
- У таквим случајевима уланчани изузеци помажу у ширењу и примарних и основних узрока грешке.
Пример : Следећи пример показује како се користе ланчани изузеци у Јави.
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// 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.
- Унутар блока три покушава да подели сваки елемент низа са 0 што доводи до изузећа АритхметицЕкцептион.
- Овај АритхметицЕкцептион је ухваћен у блоку цатцх где се креира нови РунтимеЕкцептион са оригиналним изузетком, тј. АритхметицЕкцептион као узроком.
- Пошто РунтимеЕкцептион није ухваћен што приказује праћење стека укључујући РунтимеЕкцептион и АритхметицЕкцептион.
Предности ланчаних изузетака:
Предности везаних изузетака су наведене у наставку:
- Овај изузетак помаже у отклањању грешака пружањем детаља о примарним и основним узроцима.
- Поједностављује руковање грешкама тако што омогућава ширење комплетног контекста изузетака.
- Ово побољшава следљивост грешака у сложеним апликацијама.
Недостаци ланчаних изузетака:
- Ако се не користи правилно, може учинити траг стека дужим и тежим за читање.
- Прекомерна употреба може изазвати збуњујуће поруке о грешци ако су изузеци непотребно повезани.
- Програмери морају осигурати да су значајни узроци повезани; иначе може довести у заблуду током отклањања грешака.