English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In diesem Tutorial lernen wir mit Beispielen, wie man mit den Schlüsselwörtern throw und throws Ausnahmen behandelt.
In Java können Ausnahmen in zwei Kategorien eingeteilt werden:
Nicht geprüfte Ausnahmen:Diese werden nicht bei der Kompilierung, sondern beim Laufzeit überprüft, zum Beispiel: ArithmeticException, NullPointerException, ArrayIndexOutOfBoundsException, Ausnahmen unter Error und ähnliche.
Geprüfte Ausnahmen:Prüfen Sie sie beim Kompilieren. Zum Beispiel IOException, InterruptedException und ähnliche.
Bitte referieren SieJava-Ausnahmenum eine detaillierte Übersicht über überprüfte und nicht überprüfte Ausnahmen zu erhalten.
Normalerweise müssen wir keine nicht überprüften Ausnahmen behandeln. Dies liegt daran, dass nicht überprüfte Ausnahmen durch Programmfehler verursacht werden. Und es ist eine gute Gewohnheit, sie zu korrigieren, anstatt sie zu behandeln.
Jetzt wird dieser教程重点介绍如何使用throw und throws überprüfte Ausnahmen zu behandeln.
Wir verwenden das Schlüsselwort throws in der Methodendeklaration, um den Typ der möglichen Ausnahmen zu deklarieren.
Die Syntax ist:
accessModifier returnType methodName() throws ExceptionType1, ExceptionType2 ... { // code }
Von der obigen Syntax ist ersichtlich, dass wir mehrere Ausnahmen mit throws deklarieren können.
import java.io.*; class Main { public static void findFile() throws IOException { //Kod, der IOException verursachen könnte 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); } } }
Ausgabenergebnis
java.io.FileNotFoundException: test.txt (Datei oder Verzeichnis nicht gefunden)
Wenn wir diesen Programm ausführen, wird eine FileNotFoundException ausgelöst, die von IOException abgeleitet ist, wenn die Datei test.txt nicht existiert.
Wenn eine Methode keine Ausnahmen behandelt, muss die Methode, die möglicherweise auftretende Ausnahmen in der throws-Klausel spezifizieren, damit höher liegende Methoden im Aufrufstapel sie behandeln oder sie mit dem Schlüsselwort throws selbst spezifizieren können.
Die Methode findFile() spezifiziert, dass IOException ausgelöst werden kann. Der main()aufruf dieser Methode und die Verarbeitung der ausgelösten Ausnahmen.
Dies ist die Methode, wie wir mit dem Schlüsselwort throws mehrere Ausnahmen auslösen.
import java.io.*; class Main { public static void findFile() throws NullPointerException, IOException, InvalidClassException { // Kod, der NullPointerException verursachen könnte … … … // Kod, der IOException verursachen könnte … … … // Kod, der InvalidClassException verursachen könnte … … … } public static void main(String[] args) { try{ findFile(); }1{ System.out.println(e1).getMessage()); }2{ System.out.println(e2).getMessage()); } } }
Hier weist die Methode findFile() darauf hin, dass sie NullPointerException, IOException und InvalidClassException in ihrem throws-Ausdruck werfen kann.
Bitte beachten Sie, dass wir bislang keine NullPointerException behandelt haben. Dies liegt daran, dass es sich um eine nicht überprüfte Ausnahme handelt. Es ist nicht erforderlich, es in der throws-Klausel zu spezifizieren und zu behandeln.
Es können mehrere Methoden Ausnahmen verursachen. Es wäre mühsam, try...catch für jede Methode zu schreiben, und der Code würde langatmig und schwer verständlich werden.
Wenn Sie bereits überprüfte Ausnahmen (Ausnahmen, die Sie im aktuellen Methodenaufruf behandeln möchten) überprüft haben, ist throws auch nützlich.
Das throw-Schlüsselwort wird verwendet, um eine Ausnahme explizit auszulösen.
Wenn eine Ausnahme ausgelöst wird, wechselt der Ablauf der Programmausführung von dem try-Block in den catch-Block. Wir verwenden den throw-Schlüsselwort im Methodenaufruf.
Die Syntax ist:
throw throwableObject;
Ein Throwable-Objekt ist eine Instanz der Klasse Throwable oder einer Unterklasse von Throwable.
class Main { public static void divideByZero() { throw new ArithmeticException("Versuch, durch 0 zu teilen"); } public static void main(String[] args) { divideByZero(); } }
Ausgabenergebnis
Exception in thread "main" java.lang.ArithmeticException: Versuch, durch 0 zu teilen at Main.divideByZero(Main.java:3) at Main.main(Main.java:7) Beendigungsstatus 1
In diesem Beispiel werfen wir explizit ArithmeticException.
Hinweis: ArithmeticException ist eine nicht überprüfte Ausnahme. Es ist in der Regel nicht erforderlich, nicht überprüfte Ausnahmen zu behandeln.
import java.io.*; class Main { public static void findFile() throws IOException { throw new IOException("Datei nicht gefunden"); } public static void main(String[] args) { try { findFile(); System.out.println("Der Rest des Codes im try-Block"); } catch (IOException e) { System.out.println(e.getMessage()); } } }
Ausgabenergebnis
Datei nicht gefunden
Die Methode findFile() wirft eine IOException aus, indem sie eine Nachricht an ihren Konstruktor übergibt.
Beachten Sie, dass es sich um eine überprüfte Ausnahme handelt, daher muss sie in der throws-Klausel angegeben werden.
Der Methode, die findFile() aufruft, muss diese Ausnahme behandeln oder sie selbst mit dem Schlüsselwort throws angeben.
Wir haben diese Ausnahme im main() -Methodenaufruf bearbeitet. Wird eine Ausnahme ausgelöst, wechselt der Ablauf der Programmverarbeitung zwischen den try-Blöcken in den catch-Block. Daher wird der Rest des Codes im try-Block übersprungen und die Anweisungen im catch-Block ausgeführt.