logo

Lančane iznimke u Javi

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

  1. getCause() : Ova metoda vraća stvarni uzrok iznimke.
  2. 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
Izlaz' title=

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.