Try-Catch-Finally in Java | Ausnahmebehandlung
· Try-Blöcke
· Catch-Blöcke
· Final-Blöcke
· Alles zusammenfügen
· Verschachtelte Try-Blöcke
· Mehrere Ausnahmen abfangen
Versuchen Sie es mit Blöcken
Try-Blöcke sind der erste Teil von Try/Catch-Blöcken. Sie enthalten jeglichen Code, der eine Ausnahme verursachen könnte. Wenn wir uns in Java über das Ergebnis einer Anweisung nicht sicher sind, können wir diese Anweisungen in diesen Try-Block einfügen. Ein Try-Block kann in einer Methode oder einem anderen Try-Block verwendet werden.
Auf den Try- Block folgt immer ein Catch- Block, der die Ausnahme behandelt, die im zugehörigen Try-Block auftritt.
Platzieren Sie für IOExceptions jeglichen Code, der eine Datei erstellt, liest, in sie schreibt oder schließt, in einen Try-Block
Syntax
Der erste Schritt beim Erstellen eines Ausnahmehandlers besteht darin, den Code, der eine Ausnahme auslösen könnte, in einen Try- Block einzuschließen. Im Allgemeinen sieht ein Try- Block wie folgt aus:
try {
code
}
catch and finally blocks . . .
Beispiel
Um einen Ausnahmehandler für die writeList- Methode aus der ListOfNumbers-Klasse zu erstellen, schließen Sie die ausnahmeauslösenden Anweisungen der writeList- Methode in einen try- Block ein. Es gibt mehr als eine Möglichkeit, dies zu tun. Sie können jede Codezeile, die möglicherweise eine Ausnahme auslöst, in einen eigenen Try- Block einfügen und für jede einzelne Ausnahmehandler bereitstellen. Oder Sie können den gesamten writeList- Code in einem einzigen Try- Block unterbringen und ihm mehrere Handler zuordnen. Die folgende Auflistung verwendet einen Try- Block für die gesamte Methode, da der betreffende Code sehr kurz ist.
private List<Integer> list;
private static final int SIZE = 10;
public void writeList() {
PrintWriter out = null;
try {
System.out.println("Entered try statement");
FileWriter f = new FileWriter("OutFile.txt");
out = new PrintWriter(f);
for (int i = 0; i < SIZE; i++) {
out.println("Value at: " + i + " = " + list.get(i));
}
}
catch and finally blocks . . .
}
Versuchen Sie Randnotizen zu blockieren
- Try-Blöcke können (müssen aber nicht) neben Code, der eine Ausnahme auslösen könnte, auch Code enthalten, der keine Ausnahmen auslöst.
- Programme können mehr als einen Try-Block enthalten. Darüber hinaus ist es möglich, einen Try-Block innerhalb eines anderen Try-Blocks zu haben.
Fangblöcke
Die zweite Hälfte eines Try/Catch-Blocks ist der Catch-Block. Während Try-Blöcke Code enthalten, der eine Ausnahme verursacht, enthalten Catch-Blöcke den Code, der eine Ausnahme behandelt.
In Java wird der Catch-Block verwendet, um die Ausnahme zu behandeln, die vom Try-Block abgefangen wird. Der Catch-Block enthält den Code und wird ausgeführt, wenn eine Ausnahme im Try-Block auftritt. Wenn das System beim Ausführen der Anweisungen in einem Try-Block auf eine Ausnahme stößt, überspringt es die restlichen Anweisungen und übergibt die Kontrolle an den entsprechenden Catch-Block.
Der Catch-Block fängt die Try-Block-Ausnahmen ab und behandelt sie, indem er den Ausnahmetyp innerhalb des Parameters deklariert. Die im Catch-Block deklarierte Ausnahme muss die Ausnahme der übergeordneten Klasse (z. B. Exception) oder der generierte Ausnahmetyp sein. Der beste Ansatz besteht jedoch darin, den generierten Ausnahmetyp zu deklarieren.
Der Catch-Block folgt immer nach dem Try-Block. Sobald die Kontrolle aus dem Try-Block herauskommt, gibt es keine Möglichkeit, sie wieder in den Try-Block aufzunehmen.
Syntax
Sie verknüpfen Ausnahmehandler mit einem Try- Block, indem Sie direkt nach dem Try- Block einen oder mehrere Catch- Blöcke bereitstellen . Zwischen dem Ende des Try- Blocks und dem Anfang des ersten Catch- Blocks darf sich kein Code befinden.
try {
} catch (ExceptionType name) {
}
Der Catch- Block enthält Code, der ausgeführt wird, wenn der Ausnahmehandler aufgerufen wird. Das Laufzeitsystem ruft den Ausnahmehandler auf, wenn der Handler der erste im Aufrufstapel ist, dessen ExceptionType mit dem Typ der ausgelösten Ausnahme übereinstimmt. Das System betrachtet es als Übereinstimmung, wenn das ausgelöste Objekt dem Argument des Ausnahmebehandlers legal zugeordnet werden kann.
Blockargumente abfangen
Catch-Blöcke benötigen ein Argument, nämlich den Ausnahmetyp, den sie abfangen (behandeln) sollen. Diese Argumente können von einem sehr spezifischen Ausnahmetyp bis zu einer sehr allgemeinen Kategorie von Ausnahmen reichen, die alle Ausnahmen abfangen
Beispiel
Im Folgenden sind zwei Ausnahmehandler für die writeList -Methode aufgeführt:
try {
} catch (IndexOutOfBoundsException e) {
System.err.println("IndexOutOfBoundsException: " + e.getMessage());
} catch (IOException e) {
System.err.println("Caught IOException: " + e.getMessage());
}
Blockinhalte abfangen
Der Inhalt eines Catch-Blocks ist das, was passieren soll, wenn eine Ausnahme auftritt (z. B. wenn die Datei, auf die zugegriffen wird, nicht existiert). Sie können entweder eine Nachricht drucken oder Code haben, der den Fehler behebt (z. B. nach dem fragen). Dateinamen erneut eingeben.
Catch-Block-Meldungen (Anzeige einer Beschreibung einer Ausnahme)
Sie können jede beliebige Nachricht in einen Catch-Block drucken.
Verwendung von toString()
Throwable überschreibt die toString( )-Methode (definiert durch Object), sodass sie einen String zurückgibt, der eine Beschreibung der Ausnahme enthält. Sie können diese Beschreibung in einer println( )-Anweisung anzeigen, indem Sie einfach die Ausnahme als Argument übergeben. So kann beispielsweise der Catch-Block im Vorgängerprogramm umgeschrieben werden
catch (ArithmeticException e) {
System.out.println("Exception: " + e);
a = 0; // set a to zero and continue
}
Exception: java.lang.ArithmeticException: / by zero
- getMessage() : gibt eine Fehlermeldung zurück, die für jeden Ausnahmetyp spezifisch ist. Kombinieren Sie dies mit einer println-Anweisung.
- printStackTrace() : Gibt die Art des Fehlers und die Stelle im Programm aus, an der er aufgetreten ist. Diese Methoden sind besonders hilfreich beim Debuggen und beim Finden der Ursache einer Ausnahme
- Jeder Try-Block benötigt mindestens einen Catch-Block.
- Try-Blöcke können mehrere Catch-Blöcke haben. Siehe das Beispiel rechts.
- Catch-Blöcke müssen direkt nach dem Try-Block stehen, mit dem sie gepaart sind.
Endlich Blocks
Mit dem Schlüsselwort „final“ wird ein Codeblock erstellt, der auf einen try-Block folgt. Ein finaler Codeblock wird immer ausgeführt, unabhängig davon, ob eine Ausnahme aufgetreten ist oder nicht. Mit einem „finally“-Block können Sie alle Bereinigungsanweisungen ausführen, die Sie ausführen möchten, unabhängig davon, was im geschützten Code passiert. Am Ende des Catch-Blocks erscheint ein „final“-Block. Schließlich werden Blöcke verwendet, um die Objektreferenzen aufzuheben und die E/A-Streams zu schließen.
Der „final“ -Block wird immer ausgeführt, wenn der „try “-Block beendet wird. Dadurch wird sichergestellt, dass der „finally“ -Block auch dann ausgeführt wird, wenn eine unerwartete Ausnahme auftritt. Aber „finally“ ist nicht nur für die Ausnahmebehandlung nützlich – es ermöglicht dem Programmierer, zu verhindern, dass Bereinigungscode versehentlich durch return , continue oder break umgangen wird . Das Einfügen von Bereinigungscode in einen „finally“ -Block ist immer eine gute Vorgehensweise, auch wenn keine Ausnahmen zu erwarten sind.
Das Laufzeitsystem führt die Anweisungen innerhalb des „ final“ -Blocks immer aus, unabhängig davon, was innerhalb des „ try“ -Blocks passiert. Es ist also der perfekte Ort, um Aufräumarbeiten durchzuführen.
Syntax
finally {
// cleanup code
}
Der folgende „finally“ -Block für die Methode „writeList“ bereinigt und schließt dann „ PrintWriter “ und „FileWriter“ .
finally {
if (out != null) {
System.out.println("Closing PrintWriter");
out.close();
} else {
System.out.println("PrintWriter not open");
}
if (f != null) {
System.out.println("Closing FileWriter");
f.close();
}
}
- Schließlich sind Blöcke eine optionale Ergänzung zu Try/Catch-Blöcken.
- Schließlich werden Blöcke für Code verwendet, den Sie ausführen möchten, unabhängig davon, was ausnahmsweise mit Ihrem Code passiert.
- Sie sind das Letzte, was ausgeführt wird, und sie werden jedes Mal ausgeführt, wenn Sie Ihr Programm ausführen.
- Eine Verwendung eines „finally“-Blocks wäre, sicherzustellen, dass eine Datei am Ende eines Programms geschlossen wird.
private List<Integer> list;
private static final int SIZE = 10;
public void writeList() {
PrintWriter out = null;
try {
System.out.println("Entered try statement");
FileWriter f = new FileWriter("OutFile.txt");
out = new PrintWriter(f);
for (int i = 0; i < SIZE; i++) {
out.println("Value at: " + i + " = " + list.get(i));
}
}
// catch blocks
catch (IndexOutOfBoundsException e) {
System.err.println("IndexOutOfBoundsException: " + e.getMessage());
}
catch (IOException e) {
System.err.println("Caught IOException: " + e.getMessage());
}
// finally block
finally {
if (out != null) {
System.out.println("Closing PrintWriter");
out.close();
} else {
System.out.println("PrintWriter not open");
}
if (f != null) {
System.out.println("Closing FileWriter");
f.close();
}
}
}
Bei Verwendung verschachtelter Try-Blöcke wird der innere Try-Block zuerst ausgeführt. Jede im inneren Try-Block ausgelöste Ausnahme wird im entsprechenden Catch-Block abgefangen. Wenn kein passender Catch-Block gefunden wird, wird der Catch-Block des äußeren Try-Blocks überprüft. Dieser Vorgang wird fortgesetzt, bis alle verschachtelten Try-Anweisungen erschöpft sind. Wenn kein passender Catch-Block gefunden wird, wird das Programm abnormal beendet.
Besuchen Sie den verschachtelten Try-Catch-Block .
Mehrere Ausnahmen abfangen
Wie Sie vielleicht wissen, können wir in Java mehrere Catch-Blöcke verwenden, um mehrere Ausnahmen zu behandeln
Beispiel :
catch (IOException ex) {
logger.error(ex);
throw new MyException(ex.getMessage());
catch (SQLException ex) {
logger.error(ex);
throw new MyException(ex.getMessage());
}
Beispiel :
catch(IOException | SQLException ex){
logger.error(ex);
throw new MyException(ex.getMessage());
}
Viel Spaß beim Lernen
Treten Sie der Mouad Oumous Java WhatsApp-Gruppe bei
Treten Sie dem Telegram-Kanal von Mouad Oumous bei
Unterstützen Sie unsere Publikation, indem Sie ihr folgen
Erste Schritte mit Spring Boot: Ein umfassendes Tutorial für Anfänger Spring Boot-Sicherheit | SSO | OAuth2 mit Okta Am häufigsten gestellte Java8-Stream-basierte Interviewfrage – Teil 2 Leitfaden zur Objektzuordnung mit ModelMapper in Java- Codierung: Reduzieren Sie ein Array in Javascript. Am häufigsten gestellte Java8-Stream-basierte Interviewfrage – Teil 1
![Was ist überhaupt eine verknüpfte Liste? [Teil 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































