Uitzonderingen verpakken versus opnieuw gooien in Java

1. Overzicht

De werpen trefwoord in Java wordt gebruikt om expliciet een op maat gemaakte uitzondering of een ingebouwde uitzondering te genereren. Maar soms in de vangst block, we moeten dezelfde uitzondering opnieuw genereren. Dit leidt tot het opnieuw gooien van een uitzondering.

In deze zelfstudie bespreken we de twee meest voorkomende manieren om de uitzondering opnieuw te gooien.

2. Uitzonderingen voor opnieuw gooien

Soms willen we, voordat we de uitzondering naar het hogere niveau verspreiden, enkele activiteiten uitvoeren. We willen bijvoorbeeld de DB-transactie ongedaan maken, de uitzondering vastleggen of een e-mail sturen.

We kunnen dergelijke activiteiten uitvoeren in het catch-blok en de uitzondering opnieuw gooien. Op deze manier krijgt een hoger niveau een melding dat de uitzondering in het systeem is opgetreden.

Laten we onze casus eens nader bekijken met een voorbeeld.

Hieronder gooien we dezelfde uitzondering opnieuw. En we registreren een foutbericht net voordat we het gooien:

String naam = null; probeer {return name.equals ("Joe"); // veroorzaakt NullPointerException} catch (uitzondering e) {// log gooien e; }

De console toont het volgende bericht:

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

Zoals we kunnen zien, gooit onze code elke uitzondering die wordt opgemerkt opnieuw op. Hierdoor krijgen we de originele stacktrace zonder enige wijzigingen.

3. Uitzonderingen voor verpakking

Laten we nu eens naar een andere benadering kijken.

In dit geval geven we dezelfde uitzondering door als een verwijzing in de constructor van een andere uitzondering:

String naam = null; probeer {return name.equals ("Joe"); // veroorzaakt NullPointerException} catch (Exception e) {// log throw new IllegalArgumentException (e); }

De console geeft het volgende weer:

Uitzondering in thread "main" java.lang.IllegalArgumentException: java.lang.NullPointerException bij com.baeldung.exceptions.RethrowDifferentExceptionDemo.main (RethrowDifferentExceptionDemo.java:24) Veroorzaakt door: java.lang.NullPointerException op com.baeldRethointerException .main (RethrowDifferentExceptionDemo.java:18) 

Deze keer zien we zowel de originele uitzondering als de inpakversie. Op deze manier, onze IllegalArgumentException instantie omhult het origineel NullPointerException als oorzaak. Daarom kunnen we de meer specifieke uitzondering weergeven in plaats van de algemene uitzondering.

4. Conclusie

In dit korte artikel hebben we het belangrijkste verschil gepresenteerd tussen het opnieuw gooien van de oorspronkelijke uitzondering en het eerst inpakken. Beide kantenverschillen van elkaar in de manier waarop ze het uitzonderingsbericht weergeven.

Op basis van onze vereiste kunnen we dezelfde uitzondering opnieuw gooien of deze met een specifieke uitzondering verpakken door de tweede benadering te gebruiken. Detweede benadering ziet er schoner uit en is gemakkelijk om de uitzondering terug te vinden.

Zoals altijd is het project beschikbaar op GitHub.


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