bedobja és bedobja a Java-t
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.
Példa: Ez a példa azt szemlélteti, hogy a kivételt hol lehet elkapni és visszadobni egy metóduson belül.
Java class 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:
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
Javathrowshogy kezelje a kivételtclass 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 vele
Javathrowsclass 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.' ); } } }
KimenetInside 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. |
| 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 |