Java >> Java tutorial >  >> Tag >> throw

Indpakning vs omkastning af undtagelser i Java

1. Oversigt

kastet søgeord i Java bruges til eksplicit at kaste enten en specialfremstillet undtagelse eller indbygget undtagelse. Men nogle gange i fangsten blokere, skal vi smide den samme undtagelse igen. Dette fører til, at en undtagelse gendannes.

I dette selvstudium vil vi diskutere de to mest almindelige måder at genskabe undtagelsen på.

2. Genudsendelse af undtagelser

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

Vi kan udføre sådanne aktiviteter i catch-blokken 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 gengiver vi den samme undtagelse. Og vi logger en fejlmeddelelse lige før vi sender den:

String name = null;

try {
    return name.equals("Joe"); // causes NullPointerException
} catch (Exception e) {
    // log
    throw e;
}

Konsollen viser følgende meddelelse:

Exception in thread "main" java.lang.NullPointerException
  at com.baeldung.exceptions.RethrowSameExceptionDemo.main(RethrowSameExceptionDemo.java:16)

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

3. Indpakningsundtagelser

Lad os nu tage et kig på en anden tilgang.

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

String name = null;

try {
    return name.equals("Joe"); // causes NullPointerException
} catch (Exception e) {
    // log
    throw new IllegalArgumentException(e);
}

Konsollen viser:

Exception in thread "main" java.lang.IllegalArgumentException: java.lang.NullPointerException
  at com.baeldung.exceptions.RethrowDifferentExceptionDemo.main(RethrowDifferentExceptionDemo.java:24)
Caused by: java.lang.NullPointerException
  at com.baeldung.exceptions.RethrowDifferentExceptionDemo.main(RethrowDifferentExceptionDemo.java:18)

Denne gang ser vi den oprindelige undtagelse såvel som den indpakning. På denne måde, vores IllegalArgumentException instans ombryder den originale NullPointerException som å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 at pakke den ind. Begge veje adskiller sig fra hinanden i den måde, de viser undtagelsesmeddelelsen på .

Baseret på vores krav kan vi enten genfremsætte den samme undtagelse eller omslutte den med en specifik undtagelse ved at bruge den anden tilgang. Den den anden tilgang ser renere ud og nem at spore undtagelsen tilbage .

Som altid er projektet tilgængeligt på GitHub.


Java tag