Wrapping vs Rethrowing Unntak i Java

1. Oversikt

De kaste nøkkelord i Java brukes til å eksplisitt kaste enten et skreddersydd unntak eller innebygd unntak. Men noen ganger i å fange Vi må kaste det samme unntaket igjen. Dette fører til å kaste et unntak på nytt.

I denne opplæringen vil vi diskutere de to vanligste måtene å kaste unntaket på nytt.

2. Gjenkaste unntak

Noen ganger før vi forplanter unntaket til høyere nivå, kan det være lurt å utføre noen aktiviteter. For eksempel kan det være lurt å tilbakestille DB-transaksjonen, logge unntaket eller sende en e-post.

Vi kan utføre slike aktiviteter i fangstblokken og kaste unntaket på nytt. På denne måten får et høyere nivå beskjed om at unntaket har skjedd i systemet.

La oss forstå saken vår med et eksempel.

Nedenfor kaster vi det samme unntaket på nytt. Og vi logger en feilmelding like før vi kastet den:

Strengnavn = null; prøv {return name.equals ("Joe"); // forårsaker NullPointerException} -fangst (Unntak e) {// loggkast e; }

Konsollen viser følgende melding:

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

Som vi kan se, kaster vår kode bare ethvert unntak den fanger. På grunn av dette får vi original stakksporing uten endringer.

3. Innpakninger med innpakning

La oss nå se på en annen tilnærming.

I dette tilfellet vil vi passere det samme unntaket som en referanse i konstruktøren av et annet unntak:

Strengnavn = null; prøv {return name.equals ("Joe"); // forårsaker NullPointerException} fangst (Unntak e) {// loggkast ny IllegalArgumentException (e); }

Konsollen viser:

Unntak i tråden "main" java.lang.IllegalArgumentException: java.lang.NullPointerException at com.baeldung.exceptions.RethrowDifferentExceptionDemo.main (RethrowDifferentExceptionDemo.java:24) Forårsaket av: java.lang.NullPointerException at ExceptionDeception. .main (RethrowDifferentExceptionDemo.java:18) 

Denne gangen ser vi det originale unntaket så vel som det innpakking. På denne måten, våre IllegalArgumentException instans pakker originalen NullPointerException som en årsak. Derfor kan vi vise det mer spesifikke unntaket i stedet for å vise det generiske.

4. Konklusjon

I denne korte artikkelen presenterte vi hovedforskjellen mellom å kaste det opprinnelige unntaket på nytt og først å pakke det inn. Begge veierskiller seg fra hverandre på den måten de viser unntaksmeldingen.

Basert på vårt krav, kan vi enten kaste det samme unntaket på nytt eller pakke det inn med noe spesifikt unntak ved å bruke den andre tilnærmingen. Deandre tilnærming ser renere ut og lett å spore unntaket.

Som alltid er prosjektet tilgjengelig på GitHub.


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