In Java ist die Ausnahmebehandlung eines der effektivsten Mittel zur Behandlung von Laufzeitfehlern, sodass der reguläre Ablauf der Anwendung aufrechterhalten werden kann. Es behandelt Laufzeitfehler wie NullPointerException ArrayIndexOutOfBoundsException usw. Um diese Fehler effektiv zu behandeln, stellt Java zwei Schlüsselwörter throw und throws zur Verfügung.
Java-Wurf
Das Schlüsselwort throw wird in Java verwendet, um explizit eine Ausnahme von einer Methode oder einem beliebigen Codeblock auszulösen. Wir können entweder eine aktivierte oder eine nicht aktivierte Ausnahme auslösen. Das Schlüsselwort throw wird hauptsächlich zum Auslösen benutzerdefinierter Ausnahmen verwendet.
Syntax:
werfen Beispiel
Dabei ist die Instanz ein Objekt vom Typ Throwable (oder seine Unterklassen wie Exception).
Beispiel:
throw new ArithmeticException('/ by zero');
Aber diese Ausnahme, d. h. Instanz, muss vom Typ sein Wurfbar oder eine Unterklasse von Wurfbar .
Der Ausführungsfluss des Programms stoppt unmittelbar nach der Ausführung der throw-Anweisung und der nächsten einschließenden Anweisung versuchen Block wird überprüft, um zu sehen, ob er eine hat fangen Anweisung, die dem Ausnahmetyp entspricht. Wenn eine Übereinstimmung gefunden wird, wird die kontrollierte Anweisung an diese Anweisung übergeben, andernfalls wird sie als nächstes eingefügt versuchen Block wird überprüft und so weiter. Wenn keine Übereinstimmung vorhanden ist fangen gefunden wird, stoppt der Standard-Ausnahmebehandler das Programm.
Was ist Prolog?
Beispiel: Dieses Beispiel zeigt, wo eine Ausnahme innerhalb einer Methode abgefangen und erneut ausgelöst wird.
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.'); } } }
Ausgabe
Caught inside fun(). Caught in main.
Erläuterung: Das obige Beispiel zeigt die Verwendung des Schlüsselworts throw, um explizit eine NullPointerException auszulösen. Die Ausnahme wird innerhalb der abgefangen Spaß() -Methode aufgerufen und erneut ausgelöst, wo sie dann in der main()-Methode abgefangen wird.
Beispiel: Dieses Beispiel demonstriert eine arithmetische Ausnahme.
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); } } }
Ausgabe:
Hangup (SIGHUP)
Exception in thread 'main' java.lang.ArithmeticException: Cannot divide by zero
at Geeks.main(Geeks.java:9)
Erläuterung: Das obige Beispiel zeigt eine Ausnahme mithilfe von throw, bei der aufgrund einer Division durch Null explizit eine ArithmeticException ausgelöst wird.
Java wirft
wirft ist ein Schlüsselwort in Java, das in der Signatur einer Methode verwendet wird, um anzugeben, dass diese Methode möglicherweise eine der aufgelisteten Typausnahmen auslöst. Der Aufrufer dieser Methoden muss die Ausnahme mithilfe eines Try-Catch-Blocks behandeln.
Syntax:
Typ method_name(parameters) löst Ausnahmeliste aus
Dabei ist Ausnahmeliste eine durch Kommas getrennte Liste aller Ausnahmen, die eine Methode auslösen könnte.
Wenn in einem Programm die Möglichkeit besteht, dass eine Ausnahme ausgelöst wird, warnt uns der Compiler immer davor und wir müssen diese geprüfte Ausnahme behandeln. Andernfalls erhalten wir beim Kompilieren einen Fehler, der besagt, dass die nicht gemeldete Ausnahme XXX abgefangen oder zum Auslösen deklariert werden muss. Um diesen Fehler bei der Kompilierung zu verhindern, können wir die Ausnahme auf zwei Arten behandeln:
- Durch die Verwendung von Try Catch
- Durch die Verwendung der wirft Stichwort
Wir können das Schlüsselwort throws verwenden, um die Verantwortung für die Ausnahmebehandlung an den Aufrufer zu delegieren (es kann sich um eine Methode oder eine JVM handeln), dann ist die aufrufende Methode für die Behandlung dieser Ausnahme verantwortlich.
Beispiel 1: Unbehandelte Ausnahme
Javaclass Geeks { public static void main(String[] args) { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
Ausgabe:
error: unreported exception InterruptedException; must be caught or declared to be thrownErläuterung: Im obigen Programm erhalten wir einen Kompilierzeitfehler, da die Möglichkeit einer Ausnahme besteht, wenn der Hauptthread in den Ruhezustand wechselt. Andere Threads erhalten die Möglichkeit, die Methode main() auszuführen, was zu einer InterruptedException führt.
Task-Manager für Linux
Beispiel 2: Verwendung throws Ausnahme behandeln
class Geeks { public static void main(String[] args) throws InterruptedException { Thread.sleep(10000); System.out.println('Hello Geeks'); } }
Ausgabe:
Hello GeeksErläuterung: Im obigen Programm haben wir mit dem Schlüsselwort throws das behandelt InterruptedException und wir erhalten die Ausgabe als Hallo Geeks.
Beispiel 3: Eine Ausnahme auslösen mitthrows
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.'); } } }
Ausgabe
Inside fun(). Caught in main.
Erläuterung: Das obige Beispiel löst eine IllegalAccessException von einer Methode aus und behandelt sie in der Hauptmethode mithilfe eines Try-Catch-Blocks.
Unterschied zwischen Wurf und Würfen
Die Hauptunterschiede zwischen throw und throws in Java sind folgende:
werfen | wirft |
|---|---|
Es wird verwendet, um explizit eine Ausnahme auszulösen. | Es wird verwendet, um zu deklarieren, dass eine Methode eine oder mehrere Ausnahmen auslösen kann. |
Es wird innerhalb einer Methode oder eines Codeblocks verwendet. | Es wird in der Methodensignatur verwendet. |
Es kann sowohl aktivierte als auch nicht aktivierte Ausnahmen auslösen. | Es wird nur für geprüfte Ausnahmen verwendet. Ungeprüfte Ausnahmen sind nicht erforderlich wirft Rekha-Indianer |
Die Methode oder der Block löst die Ausnahme aus. | Der Aufrufer der Methode ist für die Behandlung der Ausnahme verantwortlich. |
Stoppt den aktuellen Ausführungsfluss sofort. | Es zwingt den Aufrufer, die deklarierten Ausnahmen zu behandeln. |
throw new ArithmeticException('Error'); | public void myMethod() löst IOException {} aus |