Java werfen und wirft Schlüsselwort

In diesem Tutorial lernen wir anhand von Beispielen, wie Sie das Schlüsselwort throw and throw für die Ausnahmebehandlung verwenden.

In Java können Ausnahmen in zwei Typen eingeteilt werden:

  • Ungeprüfter Ausnahmen: Sie sind nicht zur Compile-Zeit überprüft , aber bei Laufe time.For Beispiel: ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException, Ausnahmen unter ErrorKlasse usw.
  • Überprüfte Ausnahmen: Sie werden zur Kompilierungszeit überprüft. Zum Beispiel IOException, InterruptedExceptionusw.

Weitere Informationen zu aktivierten und nicht aktivierten Ausnahmen finden Sie unter Java-Ausnahmen.

Normalerweise müssen wir keine ungeprüften Ausnahmen behandeln. Dies liegt daran, dass ungeprüfte Ausnahmen aufgrund von Programmierfehlern auftreten. Und es ist eine gute Praxis, sie zu korrigieren, anstatt sie zu behandeln.

Dieses Tutorial konzentriert sich nun darauf, wie geprüfte Ausnahmen mit throwund behandelt werden throws.

Java löst ein Schlüsselwort aus

Wir verwenden das throwsSchlüsselwort in der Methodendeklaration, um die Art der Ausnahmen zu deklarieren, die darin auftreten können.

Die Syntax lautet:

 accessModifier returnType methodName() throws ExceptionType1, ExceptionType2… ( // code ) 

Wie Sie der obigen Syntax entnehmen können, können wir throwsmehrere Ausnahmen deklarieren.

Beispiel 1: Java löst ein Schlüsselwort aus

 import java.io.*; class Main ( public static void findFile() throws IOException ( // code that may produce IOException File newFile=new File("test.txt"); FileInputStream stream=new FileInputStream(newFile); ) public static void main(String() args) ( try( findFile(); ) catch(IOException e)( System.out.println(e); ) ) ) 

Ausgabe

 java.io.FileNotFoundException: test.txt (Keine solche Datei oder kein solches Verzeichnis) 

Wenn wir dieses Programm ausführen und die Datei test.txtnicht existiert, wird a FileInputStreamausgelöst, FileNotFoundExceptionwodurch die IOExceptionKlasse erweitert wird.

Wenn eine Methode keine Ausnahmen behandelt, muss die Art der Ausnahmen, die in ihr auftreten können, in der throwsKlausel angegeben werden , damit Methoden weiter oben im Aufrufstapel diese behandeln oder sie mit dem throwsSchlüsselwort selbst angeben können.

Die findFile()Methode gibt an, dass ein IOExceptionausgelöst werden kann. Die main()Methode ruft diese Methode auf und behandelt die Ausnahme, wenn sie ausgelöst wird.

Mehrere Ausnahmen auslösen

Hier erfahren Sie, wie Sie mit dem throwsSchlüsselwort mehrere Ausnahmen auslösen können.

 import java.io.*; class Main ( public static void findFile() throws NullPointerException, IOException, InvalidClassException ( // code that may produce NullPointerException… … … // code that may produce IOException… … … // code that may produce InvalidClassException… … … ) public static void main(String() args) ( try( findFile(); ) catch(IOException e1)( System.out.println(e1.getMessage()); ) catch(InvalidClassException e2)( System.out.println(e2.getMessage()); ) ) ) 

Hier wird das findFile()gibt Verfahren , dass sie werfen kann NullPointerException, IOExceptionund InvalidClassExceptionin seiner throwsKlausel.

Beachten Sie, dass wir das nicht behandelt haben NullPointerException. Dies liegt daran, dass es sich um eine nicht aktivierte Ausnahme handelt. Es ist nicht erforderlich, es in der throwsKlausel anzugeben und damit umzugehen.

wirft Schlüsselwort Vs. versuche … zu fangen … endlich

Es kann verschiedene Methoden geben, die Ausnahmen verursachen können. Das Schreiben try… catchfür jede Methode ist mühsam und der Code wird lang und weniger lesbar.

throws Dies ist auch nützlich, wenn Sie eine Ausnahme aktiviert haben (eine Ausnahme, die behandelt werden muss), die Sie in Ihrer aktuellen Methode nicht abfangen möchten.

Java-Schlüsselwort werfen

Das throwSchlüsselwort wird verwendet, um eine einzelne Ausnahme explizit auszulösen.

Wenn eine Ausnahme ausgelöst wird, wird der Programmausführungsfluss vom tryBlock zum catchBlock übertragen. Wir verwenden das throwSchlüsselwort innerhalb einer Methode.

Die Syntax lautet:

 throw throwableObject;

Ein Wurfobjekt ist eine Instanz einer Klasse Throwableoder Unterklasse der ThrowableKlasse.

Beispiel 2: Java-Schlüsselwort throw

 class Main ( public static void divideByZero() ( throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) ) 

Ausgabe

 Ausnahme im Thread "main" java.lang.ArithmeticException: Versuch, bei Main.divideByZero (Main.java:3) bei Main.main (Main.java:7) den Exit-Status 1 durch 0 zu teilen 

In diesem Beispiel werfen wir explizit ein ArithmeticException.

Hinweis: ArithmeticException ist eine nicht aktivierte Ausnahme. Es ist normalerweise nicht erforderlich, ungeprüfte Ausnahmen zu behandeln.

Beispiel 3: Auslösen einer aktivierten Ausnahme

 import java.io.*; class Main ( public static void findFile() throws IOException ( throw new IOException("File not found"); ) public static void main(String() args) ( try ( findFile(); System.out.println("Rest of code in try block"); ) catch (IOException e) ( System.out.println(e.getMessage()); ) ) ) 

Ausgabe

 Datei nicht gefunden 

Die findFile()Methode löst eine IOExceptionmit der Nachricht aus, die wir an ihren Konstruktor übergeben haben.

Da es sich um eine aktivierte Ausnahme handelt, müssen wir sie in der throwsKlausel angeben .

Die Methoden, die diese findFile()Methode aufrufen , müssen diese Ausnahme entweder behandeln oder mit dem throwsSchlüsselwort selbst angeben .

Wir haben diese Ausnahme in der main()Methode behandelt. Der Ablauf der Programmausführung wird von tryBlock zu catchBlock übertragen, wenn eine Ausnahme ausgelöst wird. Der Rest des Codes im tryBlock wird also übersprungen und Anweisungen im catchBlock werden ausgeführt.

Interessante Beiträge...