Um ein Java-Programm so robust wie möglich zu machen, muss es in der Lage sein, mit Ausnahmen umzugehen. Der Compiler leistet seinen Beitrag, indem er es Ihnen nicht erlaubt, ein Programm zu kompilieren, bis es syntaktisch korrekt ist, und er kann auch auf überprüfte Ausnahmen hinweisen, die behandelt werden müssen. Die Ausnahmen, die wahrscheinlich die meisten Kopfschmerzen verursachen, treten jedoch auf, sobald das Programm ausgeführt wird. Um diese Ausnahmen zu umgehen, stellt die Java-Sprache die try-catch-finally-Blöcke zur Verfügung.
Das
VersuchenBlock umschließt alle Anweisungen, die möglicherweise zu einer Ausnahme führen. Zum Beispiel, wenn Sie Daten aus einer Datei mit der Taste lesen
FileReaderKlasse, es wird erwartet, dass Sie die behandeln
IOExceptionsim Zusammenhang mit der Verwendung von a
FileReaderObjekt, zum Beispiel,
FileNotFoundExceptionund
IOException. Um dies sicherzustellen, können Sie die Anweisungen platzieren, die sich mit dem Erstellen und Verwenden von befassen
FileReaderObjekt in einem
Versuchenblock: Der Code ist jedoch unvollständig, da wir zum Behandeln der Ausnahme einen Ort benötigen, an dem er abgefangen werden kann. Dies geschieht in der
Das
FangBlock (e) bieten einen Ort, an dem die von den Anweisungen in a ausgelöste Ausnahme behandelt werden kann
VersuchenBlock. Das
FangBlock wird direkt nach dem definiert
VersuchenBlock. Es muss den Typ der behandelten Ausnahme angeben. Zum Beispiel die
FileReaderDas im obigen Code definierte Objekt kann a auslösen
FileNotFoundExceptionoder ein
IOException. Wir können zwei angeben
FangBlöcke, um diese beiden Ausnahmen zu behandeln:
FileNotFoundExceptioncatchblockieren wir könnten Code platzieren, um den Benutzer zu bitten, die Datei für uns zu finden und dann zu versuchen, die Datei erneut zu lesen. In dem
IOExceptioncatch block, wir können den I / O-Fehler einfach an den Benutzer weitergeben und ihn bitten, etwas anderes zu versuchen. In beiden Fällen haben wir eine Möglichkeit bereitgestellt, mit der das Programm eine Ausnahme abfangen und sie auf kontrollierte Weise behandeln kann.
FangBlock. Wollten wir den Code in den beiden platzieren
FangDie obigen Blöcke waren genau das Gleiche. Stattdessen konnten wir den Code wie folgt schreiben: Um die Ressourcen zu schonen, können wir einen finally-Block hinzufügen. Schließlich möchten wir die Datei, die wir gelesen haben, freigeben, sobald wir fertig sind.
Die Anweisungen im finally-Block werden immer ausgeführt. Dies ist nützlich, um Ressourcen zu bereinigen, wenn der Try-Block ohne Ausnahme ausgeführt wird und in den Fällen, in denen es eine Ausnahme gibt. In beiden Fällen können wir die von uns verwendete Datei schließen.
Der finally-Block wird direkt nach dem letzten catch-Block angezeigt: