Indpakning vs gentagne undtagelser i Java

1. Oversigt

Det kaste nøgleord i Java bruges til eksplicit at kaste enten en skræddersyet undtagelse eller en indbygget undtagelse. Men nogle gange i fangst blok, skal vi smide den samme undtagelse igen. Dette fører til en ny undtagelse.

I denne vejledning diskuterer vi de to mest almindelige måder at genkaste undtagelsen på.

2. Undtagelse af genkastning

Nogle gange før vi udbreder undtagelsen til det højere niveau, vil vi måske udføre nogle aktiviteter. For eksempel vil vi muligvis gendanne DB-transaktionen, logge undtagelsen eller sende en e-mail.

Vi kan udføre sådanne aktiviteter i fangstblokken og genkaste undtagelsen igen. På denne måde får et højere niveau besked om, at undtagelsen er sket i systemet.

Lad os forstå vores sag med et eksempel.

Nedenfor kaster vi den samme undtagelse igen. Og vi logger en fejlmeddelelse lige før vi smider den:

String name = null; prøv {return name.equals ("Joe"); // forårsager NullPointerException} fangst (Undtagelse e) {// logkast e; }

Konsollen viser følgende meddelelse:

Undtagelse i tråden "hoved" java.lang.NullPointerException på com.baeldung.exceptions.RethrowSameExceptionDemo.main (RethrowSameExceptionDemo.java:16)

Som vi kan se, kaster vores kode bare enhver undtagelse, den fanger. På grund af dette får vi original staksporing uden ændringer.

3. Undtagelser om indpakning

Lad os nu se på en anden tilgang.

I dette tilfælde passerer vi den samme undtagelse som en reference i konstruktøren af ​​en anden undtagelse:

String name = null; prøv {return name.equals ("Joe"); // forårsager NullPointerException} -fangst (Undtagelse e) {// logkast nyt IllegalArgumentException (e); }

Konsollen viser:

Undtagelse i tråden "main" java.lang.IllegalArgumentException: java.lang.NullPointerException at com.baeldung.exceptions.RethrowDifferentExceptionDemo.main (RethrowDifferentExceptionDemo.java:24) Forårsaget af: java.lang.NullPointerException.exception at Exception. .main (RethrowDifferentExceptionDemo.java:18) 

Denne gang ser vi den originale undtagelse såvel som den indpakning. På denne måde vores IllegalArgumentException instans pakker originalen NullPointerException som en årsag. Derfor kan vi vise den mere specifikke undtagelse i stedet for at vise den generiske.

4. Konklusion

I denne korte artikel præsenterede vi den største forskel mellem at genkaste den oprindelige undtagelse og først indpakke den. Begge vejeadskiller sig fra hinanden på den måde, de viser undtagelsesmeddelelsen.

Baseret på vores krav kan vi enten genkaste den samme undtagelse eller pakke den med en bestemt undtagelse ved hjælp af den anden tilgang. Detanden tilgang ser renere ud og let at tilbageføre undtagelsen.

Som altid er projektet tilgængeligt på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found