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
- 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:
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.
Hva er hovedformålet med lenkede unntak i Java?
- EN
For å skjule grunnårsaken til et unntak
- B
Å knytte ett unntak med et annet
- C
For å forbedre kodeytelsen
- D
For automatisk å fikse kjøretidsfeil
Kjede unntak gjør det mulig å koble ett unntak til et annet for å vise grunnårsaken.
Hvilken metode brukes for å angi årsaken til et unntak?
- EN
getMessage()
- B
setException()
- C
initCause()
- D
initCause()
Metoden initCause() setter den underliggende årsaken til et unntak.
I eksemplet hvilken type unntak er satt som årsak til NumberFormatException?
- EN
IOException
- B
Aritmetisk unntak
- C
NullPointerException
- D
RuntimeException
Eksemplet setter en NullPointerException som årsak til NumberFormatException.
Quiz fullførte poengsummen din: 2 /3 Nøyaktighet: 0 % Logg inn for å se forklaring 1 /3 1 /3 < Previous Neste >