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 unterError
Klasse usw. - Überprüfte Ausnahmen: Sie werden zur Kompilierungszeit überprüft. Zum Beispiel
IOException
,InterruptedException
usw.
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 throw
und behandelt werden throws
.
Java löst ein Schlüsselwort aus
Wir verwenden das throws
Schlü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 throws
mehrere 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.txt
nicht existiert, wird a FileInputStream
ausgelöst, FileNotFoundException
wodurch die IOException
Klasse erweitert wird.
Wenn eine Methode keine Ausnahmen behandelt, muss die Art der Ausnahmen, die in ihr auftreten können, in der throws
Klausel angegeben werden , damit Methoden weiter oben im Aufrufstapel diese behandeln oder sie mit dem throws
Schlüsselwort selbst angeben können.
Die findFile()
Methode gibt an, dass ein IOException
ausgelö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 throws
Schlü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
, IOException
und InvalidClassException
in seiner throws
Klausel.
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 throws
Klausel 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… catch
fü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 throw
Schlüsselwort wird verwendet, um eine einzelne Ausnahme explizit auszulösen.
Wenn eine Ausnahme ausgelöst wird, wird der Programmausführungsfluss vom try
Block zum catch
Block übertragen. Wir verwenden das throw
Schlüsselwort innerhalb einer Methode.
Die Syntax lautet:
throw throwableObject;
Ein Wurfobjekt ist eine Instanz einer Klasse Throwable
oder Unterklasse der Throwable
Klasse.
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 IOException
mit der Nachricht aus, die wir an ihren Konstruktor übergeben haben.
Da es sich um eine aktivierte Ausnahme handelt, müssen wir sie in der throws
Klausel angeben .
Die Methoden, die diese findFile()
Methode aufrufen , müssen diese Ausnahme entweder behandeln oder mit dem throws
Schlüsselwort selbst angeben .
Wir haben diese Ausnahme in der main
()
Methode behandelt. Der Ablauf der Programmausführung wird von try
Block zu catch
Block übertragen, wenn eine Ausnahme ausgelöst wird. Der Rest des Codes im try
Block wird also übersprungen und Anweisungen im catch
Block werden ausgeführt.