In Java is het afhandelen van uitzonderingen een van de effectieve manieren om runtimefouten af te handelen, zodat de reguliere stroom van de applicatie behouden kan blijven. Het verwerkt runtimefouten zoals NullPointerException ArrayIndexOutOfBoundsException etc. Om deze fouten effectief af te handelen, biedt Java twee trefwoorden throw en throws.
Java-worp
Het sleutelwoord throw in Java wordt gebruikt om expliciet een uitzondering te genereren vanuit een methode of een ander codeblok. We kunnen een aangevinkte of een ongecontroleerde uitzondering genereren. Het trefwoord throw wordt voornamelijk gebruikt om aangepaste uitzonderingen te genereren.
Syntaxis:
gooien Aanleg
Waar instance een object is van het type Throwable (of de subklassen ervan, zoals Exception).
Voorbeeld:
throw new ArithmeticException('/ by zero');
Maar deze uitzondering, d.w.z. Instance, moet van het type zijn Gooibaar of een subklasse daarvan Gooibaar .
De uitvoeringsstroom van het programma stopt onmiddellijk nadat de throw-instructie is uitgevoerd en de dichtstbijzijnde omhulling poging blok wordt gecontroleerd om te zien of het een vangst instructie die overeenkomt met het type uitzondering. Als er een gecontroleerde match wordt gevonden, wordt de verklaring anders volgende bijgevoegd poging blok wordt gecontroleerd enzovoort. Indien geen match vangst wordt gevonden, zal de standaard uitzonderingshandler het programma stoppen.
object naar jsonobject java
Voorbeeld: Dit voorbeeld laat zien waar een uitzondering binnen een methode wordt gegooid, gevangen en opnieuw gegooid.
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.'); } } }
Uitvoer
Caught inside fun(). Caught in main.
Uitleg: Het bovenstaande voorbeeld demonstreert het gebruik van het sleutelwoord throw om expliciet een NullPointerException te genereren. De uitzondering zit gevangen in het plezier() methode en opnieuw gegooid waar het vervolgens wordt opgevangen in de methode main().
Voorbeeld: Dit voorbeeld demonstreert een rekenkundige uitzondering.
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); } } }
Uitgang:
Hangup (SIGHUP)
Exception in thread 'main' java.lang.ArithmeticException: Cannot divide by zero
at Geeks.main(Geeks.java:9)
Uitleg: Het bovenstaande voorbeeld demonstreert een uitzondering met behulp van throw waarbij een ArithmeticException expliciet wordt gegenereerd vanwege deling door nul.
Java gooit
gooit is een trefwoord in Java dat wordt gebruikt in de handtekening van een methode om aan te geven dat deze methode mogelijk een van de genoemde type-uitzonderingen genereert. De aanroeper van deze methoden moet de uitzondering afhandelen met behulp van een try-catch-blok.
Syntaxis:
type method_name(parameters) genereert exception_list
waarbij exception_list een door komma's gescheiden lijst is van alle uitzonderingen die een methode kan genereren.
Als er in een programma een kans bestaat om een uitzondering te genereren, waarschuwt de compiler ons er altijd voor en moeten we die gecontroleerde uitzondering afhandelen. Anders krijgen we een foutmelding tijdens het compileren dat niet-gerapporteerde uitzondering XXX moet worden opgevangen of verklaard dat deze wordt gegenereerd. Om deze compileerfout te voorkomen, kunnen we de uitzondering op twee manieren afhandelen:
- Door gebruik te maken van try-catch
- Door gebruik te maken van de gooit trefwoord
We kunnen het trefwoord throws gebruiken om de verantwoordelijkheid voor het afhandelen van uitzonderingen te delegeren aan de aanroeper (het kan een methode of JVM zijn), waarna de aanroepmethode verantwoordelijk is voor het afhandelen van die uitzondering.
Voorbeeld 1: Onverwerkte uitzondering
Javaclass Geeks { public static void main(String[] args) { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
Uitgang:
error: unreported exception InterruptedException; must be caught or declared to be thrownUitleg: In het bovenstaande programma krijgen we een compileerfout omdat er een kans is op een uitzondering als de hoofdthread gaat slapen. Andere threads krijgen de kans om de main() -methode uit te voeren, wat InterruptedException zal veroorzaken.
Voorbeeld 2: Gebruik throws uitzondering afhandelen
class Geeks { public static void main(String[] args) throws InterruptedException { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
Uitgang:
Hello GeeksUitleg: In het bovenstaande programma hebben we met behulp van het trefwoord worpen de OnderbrokenUitzondering en we krijgen de uitvoer als Hallo Geeks.
muiswiel scrollt niet goed
Voorbeeld 3: Een uitzondering gooien metthrows
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.'); } } }
Uitvoer
Inside fun(). Caught in main.
Uitleg: In het bovenstaande voorbeeld wordt een IllegalAccessException vanuit een methode gegenereerd en deze in de hoofdmethode afgehandeld met behulp van een try-catch-blok.
Verschil tussen gooien en gooien
De belangrijkste verschillen tussen gooien en gooien in Java zijn als volgt:
semantische fout
gooien | gooit |
|---|---|
Het wordt gebruikt om expliciet een uitzondering te genereren. | Het wordt gebruikt om aan te geven dat een methode een of meer uitzonderingen kan genereren. |
Het wordt gebruikt binnen een methode of een codeblok. | Het wordt gebruikt in de methodehandtekening. |
Het kan zowel aangevinkte als niet-gecontroleerde uitzonderingen genereren. | Het wordt alleen gebruikt voor gecontroleerde uitzonderingen. Niet-aangevinkte uitzonderingen zijn niet vereist gooit |
De methode of het blok genereert de uitzondering. | De aanroeper van de methode is verantwoordelijk voor het afhandelen van de uitzondering. |
Stopt de huidige uitvoeringsstroom onmiddellijk. | Het dwingt de beller om de aangegeven uitzonderingen af te handelen. |
throw new ArithmeticException('Error'); | public void myMethod() gooit IOException {} |