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
- getCause() : Denne metoden returnerer den faktiske årsaken til et unntak.
- 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
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.