Spracovanie výnimiek v jazyku Java je jedným z účinných prostriedkov na spracovanie chýb pri behu, aby sa zachoval pravidelný tok aplikácie. Zaoberá sa runtime chybami, ako je NullPointerException ArrayIndexOutOfBoundsException atď. Na efektívne spracovanie týchto chýb Java poskytuje dve kľúčové slová throw a throws.
Java hod
Kľúčové slovo throw v jazyku Java sa používa na explicitné vyvolanie výnimky z metódy alebo akéhokoľvek bloku kódu. Môžeme vyvolať zaškrtnutú alebo nezaškrtnutú výnimku. Kľúčové slovo throw sa používa hlavne na vyvolanie vlastných výnimiek.
Syntax:
hodiť Inštancia
Kde inštancia je objekt typu Throwable (alebo jeho podtriedy, ako napríklad Exception).
Príklad:
throw new ArithmeticException('/ by zero');
Ale táto výnimka, t. j. inštancia, musí byť typu Vhadzovateľné alebo podtriedu Vhadzovateľné .
Tok vykonávania programu sa zastaví ihneď po vykonaní príkazu throw a najbližšom uzavretí skúste blok sa skontroluje, či má a chytiť vyhlásenie, ktoré zodpovedá typu výnimky. Ak zistí, že zhoda je kontrolovaná, prenesie sa do tohto príkazu, inak sa pripojí k ďalšiemu skúste blok je skontrolovaný a pod. Ak žiadna zhoda chytiť sa nájde, potom predvolená obsluha výnimky zastaví program.
trojitá zima
Príklad: Tento príklad ukazuje, kde je výnimka zachytená a znovu vyvolaná v rámci metódy.
Javaclass Geeks { static void fun() { try { throw new NullPointerException('demo'); } catch (NullPointerException e) { System.out.println('Caught inside fun().'); throw e; // rethrowing the exception } } public static void main(String args[]) { try { fun(); } catch (NullPointerException e) { System.out.println('Caught in main.'); } } }
Výstup
Caught inside fun(). Caught in main.
Vysvetlenie: Vyššie uvedený príklad ukazuje použitie kľúčového slova throw na explicitné vyvolanie výnimky NullPointerException. Výnimka je zachytená vo vnútri zábava () metódu a znovu ju vyvolá, kde sa potom zachytí v metóde main().
Príklad: Tento príklad demonštruje aritmetickú výnimku.
Java// Throwing an arithmetic exception class Geeks { public static void main(String[] args){ int numerator = 1; int denominator = 0; if (denominator == 0) { // Manually throw an ArithmeticException throw new ArithmeticException('Cannot divide by zero'); } else { System.out.println(numerator / denominator); } } }
výstup:
Hangup (SIGHUP)
Exception in thread 'main' java.lang.ArithmeticException: Cannot divide by zero
at Geeks.main(Geeks.java:9)
Vysvetlenie: Vyššie uvedený príklad demonštruje výnimku pomocou throw, kde je aritmetická výnimka explicitne vyvolaná v dôsledku delenia nulou.
Java hádže
hádže je kľúčové slovo v jazyku Java, ktoré sa používa v podpise metódy na označenie, že táto metóda môže vyvolať jednu z uvedených výnimiek typu. Volajúci týchto metód musí spracovať výnimku pomocou bloku try-catch.
Syntax:
typ názov_metódy (parametre) vyvolá zoznam_výnimiek
kde zoznam_výnimiek je čiarkami oddelený zoznam všetkých výnimiek, ktoré môže metóda vyvolať.
Ak v programe existuje šanca vyvolať výnimku, kompilátor nás na to vždy upozorní a my musíme túto kontrolovanú výnimku spracovať. V opačnom prípade dostaneme chybu v čase kompilácie, ktorá hovorí, že neohlásená výnimka XXX musí byť zachytená alebo deklarovaná ako vyvolaná. Aby sme predišli tejto chybe pri kompilácii, môžeme výnimku spracovať dvoma spôsobmi:
- Pomocou try catch
- Pomocou hádže kľúčové slovo
Môžeme použiť kľúčové slovo throws na delegovanie zodpovednosti za spracovanie výnimiek na volajúceho (môže to byť metóda alebo JVM), potom je metóda volajúceho zodpovedná za spracovanie tejto výnimky.
Príklad 1: Neošetrená výnimka
Javaclass Geeks { public static void main(String[] args) { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
výstup:
error: unreported exception InterruptedException; must be caught or declared to be thrownVysvetlenie: Vo vyššie uvedenom programe dostávame chybu času kompilácie, pretože existuje šanca na výnimku, ak hlavné vlákno prejde do režimu spánku, iné vlákna dostanú možnosť spustiť metódu main(), ktorá spôsobí InterruptedException.
Príklad 2: Použitie throws zvládnuť výnimku
class Geeks { public static void main(String[] args) throws InterruptedException { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
výstup:
Hello GeeksVysvetlenie: Vo vyššie uvedenom programe pomocou kľúčového slova throws sme spracovali InterruptedException a dostaneme výstup ako Ahojte Geeks.
Príklad 3: Hádzanie výnimky sthrows
class Geeks { static void fun() throws IllegalAccessException { System.out.println('Inside fun(). '); throw new IllegalAccessException('demo'); } public static void main(String args[]) { try { fun(); } catch (IllegalAccessException e) { System.out.println('Caught in main.'); } } }
Výstup
Inside fun(). Caught in main.
Vysvetlenie: Vyššie uvedený príklad hádzania výnimky IllegalAccessException z metódy a jej spracovania v hlavnej metóde pomocou bloku try-catch.
Logika 1. rádu
Rozdiel medzi hodom a hodom
Hlavné rozdiely medzi hodom a hodom v Jave sú nasledovné:
hodiť | hádže |
|---|---|
Používa sa na explicitné vyvolanie výnimky. | Používa sa na vyhlásenie, že metóda môže vyvolať jednu alebo viac výnimiek. stredový obrázok v css |
Používa sa vo vnútri metódy alebo bloku kódu. | Používa sa v podpise metódy. |
Môže vyvolať začiarknuté aj nezačiarknuté výnimky. | Používa sa len pre začiarknuté výnimky. Nekontrolované výnimky sa nevyžadujú hádže |
Metóda alebo blok vyvolá výnimku. | Volajúci spôsob je zodpovedný za spracovanie výnimky. |
Okamžite zastaví aktuálny tok vykonávania. | Núti volajúceho zvládnuť deklarované výnimky. |
hodiť novú ArithmeticException('Error'); | public void myMethod() vyvolá IOException {} |