Verižne izjeme v Javi omogočajo povezovanje ene izjeme z drugo, tj. ena izjema opisuje vzrok druge izjeme.
- Na primer, razmislite o situaciji, v kateri metoda vrže an ArithmeticException zaradi poskusa deljenja z ničlo.
- Toda glavni vzrok napake je bila napaka V/I, zaradi katere je bil delitelj enak nič.
- V takih primerih verižne izjeme pomagajo širiti tako primarne kot temeljne vzroke napake.
Primer : Naslednji primer prikazuje, kako uporabiti verižne izjeme v Javi.
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()); } } }
Izhod
Caught Exception: java.lang.NumberFormatException: Primary Exception Cause of Exception: java.lang.NullPointerException: Root cause of the exception
Opomba: Verižne izjeme, znane tudi kot ugnezdene izjeme, nam omogočajo, da vzrok povežemo z izjemo v Javi. To je uporabno, ko želimo posredovati informacije o prvotnem vzroku izjeme.
Konstruktorji
- Throwable (Trowable vzrok) : kjer je vzrok izjema, ki povzroči trenutno izjemo.
- Throwable (String msg Throwable vzrok) : kjer je sporočilo sporočilo o izjemi, vzrok pa je izjema, ki povzroči trenutno izjemo.
Metode Throwable podpirajo verižne izjeme
- getCause() : Ta metoda vrne dejanski vzrok izjeme.
- initCause (vrečni vzrok) : Ta metoda nastavi vzrok za klicno izjemo.
primer: Uporaba sporočila po meri z verižnimi izjemami
V Javi lahko verižimo izjeme z uporabo konstruktorja razreda 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); } } }
Izhod:
rhel proti centos
Pojasnilo: V tem primeru niz celih števil in nastavi delitelj na 0.
- Znotraj poskusnega bloka poskuša razdeliti vsak element matrike z 0, kar vrže ArithmeticException.
- Ta ArithmeticException je ujeta v bloku catch, kjer je ustvarjena nova RuntimeException z izvirno izjemo, tj. ArithmeticException kot vzrokom.
- Ker RuntimeException ni ujeta, kar prikaže sled sklada, vključno z RuntimeException in ArithmeticException.
Prednosti verižnih izjem:
Prednosti verižnih izjem so navedene spodaj:
- Ta izjema pomaga pri odpravljanju napak z zagotavljanjem podrobnosti o primarnih in temeljnih vzrokih.
- Poenostavi obravnavo napak z omogočanjem širjenja celotnega konteksta izjeme.
- To izboljša sledljivost napak v kompleksnih aplikacijah.
Slabosti verižnih izjem:
- Če se ne uporablja pravilno, lahko sled sklada postane daljša in težje berljiva.
- Prekomerna uporaba lahko povzroči nejasna sporočila o napakah, če so izjeme po nepotrebnem verižene.
- Razvijalci morajo zagotoviti, da so pomembni vzroki povezani; drugače lahko zavede med odpravljanjem napak.