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.