Výnimky typu Wrapping vs Rethrowing v Jave

1. Prehľad

The hodiť kľúčové slovo v Jave sa používa na výslovné použitie buď výnimky vytvorenej na mieru, alebo zabudovanej výnimky. Ale niekedy v chytiť blok, musíme hodiť znova tú istú výnimku. To vedie k opätovnému odmietnutiu výnimky.

V tomto tutoriáli si rozoberieme dva najbežnejšie spôsoby opätovného vyhodenia výnimky.

2. Výnimky z opätovného vhadzovania

Niekedy pred rozšírením výnimky na vyššiu úroveň možno budeme chcieť vykonať niektoré činnosti. Napríklad by sme mohli chcieť vrátiť transakciu DB, prihlásiť výnimku alebo poslať e-mail.

Takéto činnosti môžeme vykonávať v bloku úlovkov a znova vyhodiť výnimku. Týmto spôsobom dostane vyššia úroveň upozornenie, že v systéme došlo k výnimke.

Poďme pochopiť náš prípad na príklade.

Nižšie uvádzame rovnakú výnimku. Chybové hlásenie zaznamenávame tesne predtým, ako ho vyhodíme:

Názov reťazca = null; skus {vratit meno.equals ("Joe"); // spôsobí NullPointerException} catch (Výnimka e) {// log throw e; }

Konzola zobrazí nasledujúcu správu:

Výnimka vo vlákne „main“ java.lang.NullPointerException na adrese com.baeldung.exceptions.RethrowSameExceptionDemo.main (RethrowSameExceptionDemo.java:16)

Ako vidíme, náš kód iba prerobí každú zachytenú výnimku. Z tohto dôvodu dostaneme pôvodné trasovanie zásobníka bez akýchkoľvek zmien.

3. Výnimky zo zalamovania

Poďme sa teraz pozrieť na iný prístup.

V tomto prípade odovzdáme rovnakú výnimku ako referenciu v konštruktore inej výnimky:

Názov reťazca = null; skus {vratit meno.equals ("Joe"); // spôsobí NullPointerException} catch (Výnimka e) {// log throw new IllegalArgumentException (e); }

Konzola zobrazí:

Výnimka vo vlákne „hlavná“ java.lang.IllegalArgumentException: java.lang.NullPointerException na adrese com.baeldung.exceptions.RethrowDifferentExceptionDemo.main (RethrowDifferentExceptionDemo.java:24) Spôsobená: java.lang.NullPointerException na com.baeldung.exception.exception.exif .main (RethrowDifferentExceptionDemo.java:18) 

Tentokrát sa dočkáme pôvodnej výnimky, ako aj zavinovacej. Touto cestou, náš IllegalArgumentException inštancia zalomí originál NullPointerException ako príčina. Preto môžeme zobraziť špecifickejšiu výnimku namiesto všeobecnej.

4. Záver

V tomto krátkom článku sme predstavili hlavný rozdiel medzi opätovným použitím pôvodnej výnimky a jej prvým zabalením. Aj tak aj taksa líšia spôsobom zobrazenia správy o výnimke.

Na základe našej požiadavky môžeme pomocou druhého prístupu buď znova vyhodiť tú istú výnimku, alebo ju zabaliť do nejakej konkrétnej výnimky. Thedruhý prístup vyzerá čistejšie a ľahko sa dá vyňať výnimka.

Ako vždy je projekt k dispozícii na GitHub.


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