Java-ban a kivételkezelés az egyik hatékony eszköz a futásidejű hibák kezelésére, hogy az alkalmazás szabályos áramlását meg lehessen őrizni. Kezeli a futásidejű hibákat, például a NullPointerException ArrayIndexOutOfBoundsException stb. Ezeknek a hibáknak a hatékony kezeléséhez a Java két kulcsszót biztosít: dobás és dob.
Java dobás
A Java-ban a throw kulcsszót arra használják, hogy kifejezetten kivételt dobjanak ki egy metódusból vagy bármely kódblokkból. Dobhatunk bejelölt vagy nem ellenőrzött kivételt. A throw kulcsszót főként egyéni kivételek dobására használják.
Szintaxis:
dobás Példa
Ahol a példány egy Throwable típusú objektum (vagy annak alosztályai, mint például az Exception).
Példa:
dob új ArithmeticException('/ nullával');
De ennek a kivételnek, azaz a példánynak típusnak kell lennie Dobható vagy annak egy alosztálya Dobható .
A program végrehajtásának folyamata azonnal leáll a throw utasítás végrehajtása és a legközelebbi bezárás után megpróbál blokkot ellenőrzi, hogy van-e benne a fogás a kivétel típusának megfelelő utasítás. Ha egyezést talál, a vezérelt egyezés átkerül erre az utasításra, ellenkező esetben a következő befoglaló megpróbál blokk ellenőrzése és így tovább. Ha nincs egyezés fogás található, akkor az alapértelmezett kivételkezelő leállítja a programot.
k klaszterezési algoritmus
Példa: Ez a példa azt szemlélteti, hogy a kivételt hol lehet elkapni és visszadobni egy metóduson belül.
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.'); } } }
Kimenet
Caught inside fun(). Caught in main.
Magyarázat: A fenti példa bemutatja a throw kulcsszó használatát NullPointerException explicit dobására. A kivétel belül fogott móka () metódussal és visszadobja, ahol azután a main() metódus elkapja.
Példa: Ez a példa egy aritmetikai kivételt mutat be.
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); } } }
Kimenet:
Hangup (SIGHUP)
Exception in thread 'main' java.lang.ArithmeticException: Cannot divide by zero
at Geeks.main(Geeks.java:9)
Magyarázat: A fenti példa egy dobást használó kivételt mutat be, ahol az aritmetikai kivétel kifejezetten a nullával való osztás miatt kerül kidobásra.
Java dob
dobások egy kulcsszó a Java nyelvben, amelyet egy metódus aláírásában használnak annak jelzésére, hogy ez a metódus a felsorolt típuskivételek valamelyikét dobhatja ki. A metódusok hívójának a kivételt try-catch blokk segítségével kell kezelnie.
Szintaxis:
A method_name(parameters) típus kivétellistát dob
ahol a kivétellista egy vesszővel elválasztott lista az összes kivételről, amelyet a metódus dobhat.
Egy programban, ha van esély kivételt emelni, a fordító mindig figyelmeztet minket, és kezelnünk kell az ellenőrzött kivételt. Ellenkező esetben fordítási időbeli hibaüzenetet kapunk, miszerint a XXX be nem jelentett kivételt el kell fogni vagy dobottnak kell nyilvánítani. Ennek a fordítási időbeli hibának a megelőzése érdekében kétféleképpen kezelhetjük a kivételt:
- A try catch használatával
- dobások kulcsszó
A throws kulcsszóval átruházhatjuk a kivételkezelés felelősségét a hívóra (ez lehet metódus vagy JVM), majd a hívó metódus felelős a kivétel kezeléséért.
1. példa: Kezeletlen kivétel
Javaclass Geeks { public static void main(String[] args) { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
Kimenet:
hogyan lehet letiltani a fejlesztői módot
error: unreported exception InterruptedException; must be caught or declared to be thrownMagyarázat: A fenti programban fordítási idő hibát kapunk, mert fennáll a kivétel lehetősége, ha a fő szál aludni fog, más szálak megkapják az esélyt a main() metódus végrehajtására, amely InterruptedException-t okoz.
2. példa: Használata throws hogy kezelje a kivételt
class Geeks { public static void main(String[] args) throws InterruptedException { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
Kimenet:
Hello GeeksMagyarázat: A fenti programban a throws kulcsszó használatával kezeltük a MegszakítottKivétel és a kimenetet mint Sziasztok Geeks.
3. példa: Kivételt dobni velethrows
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.'); } } }
Kimenet
Inside fun(). Caught in main.
Magyarázat: A fenti példa egy IllegalAccessException kivételt dob egy metódusból, és kezeli azt a fő metódusban egy try-catch blokk segítségével.
Különbség a dobás és a dobás között
A Java dobás és dobás közötti fő különbségek a következők:
dobás | dobások |
|---|---|
Arra használják, hogy kifejezetten kivételt adjanak. | Arra használják, hogy deklarálják, hogy egy metódus egy vagy több kivételt okozhat. |
Metóduson vagy kódblokkon belül használják. | A metódus aláírásában használatos. próbáld elkapni a java-t |
Ellenőrzött és ellenőrizetlen kivételeket is dobhat. | Csak ellenőrzött kivételeknél használatos. A nem ellenőrzött kivételekre nincs szükség dobások |
A metódus vagy blokk kivételt dob. | A metódus hívója felelős a kivétel kezeléséért. |
Azonnal leállítja az aktuális végrehajtási folyamatot. | Arra kényszeríti a hívót, hogy kezelje a deklarált kivételeket. |
dob új ArithmeticException('Error'); | public void myMethod() a(z) {} IOException kivételt dobja |