Lančane iznimke u Javi dopuštaju povezivanje jedne iznimke s drugom, tj. jedna iznimka opisuje uzrok druge iznimke.
- Na primjer, razmotrite situaciju u kojoj metoda baca an ArithmeticException zbog pokušaja dijeljenja s nulom.
- No glavni uzrok pogreške bio je I/O kvar zbog kojeg je djelitelj bio nula.
- U takvim slučajevima ulančane iznimke pomažu u širenju primarnih i temeljnih uzroka pogreške.
Primjer : Sljedeći primjer pokazuje kako koristiti ulančane iznimke u 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()); } } }
Izlaz
Caught Exception: java.lang.NumberFormatException: Primary Exception Cause of Exception: java.lang.NullPointerException: Root cause of the exception
Bilješka: Lančane iznimke također poznate kao ugniježđene iznimke omogućuju nam povezivanje uzroka s iznimkom u Javi. Ovo je korisno kada želimo širiti informacije o izvornom uzroku iznimke.
Konstruktori
- Bacivi (bacivi uzrok) : gdje je uzrok iznimka koja uzrokuje trenutnu iznimku.
- Throwable(String msg Throwable reason) : Gdje je msg poruka o iznimci, a uzrok je iznimka koja uzrokuje trenutnu iznimku.
Metode Throwable Supporting Chained Exceptions
- getCause() : Ova metoda vraća stvarni uzrok iznimke.
- initCause (uzrok koji se može izbaciti) : Ova metoda postavlja uzrok za pozivnu iznimku.
Primjer: Korištenje prilagođene poruke s ulančanim iznimkama
U Javi možemo ulančati iznimke koristeći konstruktor klase 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); } } }
Izlaz:
primjer OS otvorenog koda je
Obrazloženje: U ovom primjeru niz cijelih brojeva i postavlja djelitelj na 0.
- Unutar bloka try pokušava podijeliti svaki element niza s 0 što izbacuje ArithmeticException.
- Ova ArithmeticException je uhvaćena u bloku catch gdje se kreira nova RuntimeException s izvornom iznimkom, tj. ArithmeticException kao uzrokom.
- Budući da RuntimeException nije uhvaćen, što prikazuje praćenje hrpe uključujući RuntimeException i ArithmeticException.
Prednosti lančanih iznimaka:
Prednosti ulančanih iznimaka navedene su u nastavku:
- Ova iznimka pomaže u otklanjanju pogrešaka pružajući pojedinosti o primarnim i temeljnim uzrocima.
- Pojednostavljuje rukovanje pogreškama omogućavajući širenje kompletnog konteksta iznimke.
- To poboljšava mogućnost praćenja pogrešaka u složenim aplikacijama.
Nedostaci lančanih iznimaka:
- Ako se ne koristi ispravno, može učiniti praćenje hrpe duljim i težim za čitanje.
- Prekomjerna upotreba može uzrokovati zbunjujuće poruke o pogrešci ako su iznimke nepotrebno ulančane.
- Programeri moraju osigurati da su smisleni uzroci povezani; inače može dovesti u zabludu tijekom otklanjanja pogrešaka.