logo

Kjede unntak i Java

Kjede unntak i Java tillater å assosiere ett unntak med et annet, dvs. ett unntak beskriver årsaken til et annet unntak.

  • Tenk for eksempel på en situasjon der en metode kaster en Aritmetisk unntak på grunn av et forsøk på å dele på null.
  • Men grunnårsaken til feilen var en I/O-feil som førte til at divisoren var null.
  • I slike tilfeller hjelper sammenkjedede unntak å spre både de primære og underliggende årsakene til feilen.

Eksempel : Følgende eksempel viser hvordan du bruker kjedede unntak i Java.

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

Produksjon
Caught Exception: java.lang.NumberFormatException: Primary Exception Cause of Exception: java.lang.NullPointerException: Root cause of the exception 

Note: Kjede unntak også kjent som nestede unntak lar oss knytte en årsak til et unntak i Java. Dette er nyttig når vi ønsker å spre informasjon om den opprinnelige årsaken til et unntak.



Konstruktører

  • Kastbar (årsak som kan kastes) : Der årsak er unntaket som forårsaker det gjeldende unntaket.
  • Kastbar (String msg Kastbar årsak) : Hvor msg er unntaksmeldingen og årsak er unntaket som forårsaker det gjeldende unntaket.

Metoder for kastbare støttende kjedede unntak

  1. getCause() : Denne metoden returnerer den faktiske årsaken til et unntak.
  2. initCause (kastbar årsak) : Denne metoden angir årsaken til det anropende unntaket.

Eksempel: Bruke en tilpasset melding med lenkede unntak

I Java kan vi kjede unntak ved å bruke konstruktøren til Throwable-klassen.

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

Produksjon:

innsettingsnøkkel for laptop
Produksjon' title=

Forklaring: I dette eksemplet en matrise med heltall og setter divisor til 0.

  • Inne i try-blokken prøver den å dele hvert element i matrisen med 0, noe som gir et ArithmeticException.
  • Dette ArithmeticException er fanget i catch-blokken der et nytt RuntimeException opprettes med det opprinnelige unntaket, dvs. ArithmeticException som årsak.
  • Siden RuntimeException ikke fanges opp som viser stabelsporet inkludert RuntimeException og ArithmeticException.

Fordeler med lenkede unntak:

Fordelene med kjedede unntak er listet opp nedenfor:

  • Dette unntaket hjelper til med feilsøking ved å gi detaljer om både primære og rotårsaker.
  • Det forenkler feilhåndtering ved å aktivere spredning av fullstendig unntakskontekst.
  • Dette forbedrer sporbarheten av feil i komplekse applikasjoner.

Ulemper med lenkede unntak:

  • Hvis det ikke brukes riktig, kan det gjøre stabelsporet lengre og vanskeligere å lese.
  • Overbruk kan forårsake forvirrende feilmeldinger hvis unntak er lenket unødvendig.
  • Utviklere må sørge for at meningsfulle årsaker er knyttet sammen; ellers kan det villede under feilsøking.