Ausnahmen (exceptions) sind ein Mechanismus zur Fehlerbehandlung in Java. Jedes geworfene Objekt ist eine abgeleitete Klasse von Throwable. Es gibt zwei Hauptkategorien:
Exception, außer RuntimeException): müssen ausdrücklich behandelt oder in der Methodensignatur durch throws deklariert werden.RuntimeException): müssen nicht ausdrücklich behandelt werden, können überall auftreten (z. B. NullPointerException).Wann verwenden?
public void readFile(String path) throws IOException { // Checked exception — erfordert Verarbeitung Files.readAllLines(Paths.get(path)); } public void divide(int a, int b) { int c = a / b; // Unchecked — ArithmeticException }
Kann eine Methode, die kein throws deklariert, eine checked exception auslösen?
Antwort: Nein, der Compiler erlaubt es nicht, eine checked exception ohne Deklaration in der Methodensignatur (throws) auszulösen. Aber eine unchecked exception kann ohne jede Warnung ausgelöst werden.
void foo() { throw new IOException(); // Kompilierungsfehler }
Geschichte
In einer Internetbank beschloss der Kunde, die Behandlung von
SQLExceptionszu ignorieren, indem er unchecked-Wraps verwendete. Dadurch führten unsichtbare Fehler nach dem Update des Treibers zu einer Dateninkonsistenz.
Geschichte
In einer Protokollanwendung blieb die Protokolldatei aufgrund einer unentdeckten checked exception (
FileNotFoundException) gesperrt, die in der Aufrufkette "verloren" ging, der Fehler wurde nicht rechtzeitig behandelt, und die Anwendung konnte nichts mehr in die Protokolle schreiben.
Geschichte
In einer Handelsplattform implementierte das Team einen globalen catch(Throwable), um "niemals abzustürzen". Letztendlich wurden kritische unchecked-exceptions maskiert — die Anwendung konnte im inkonsistenten Zustand weiterarbeiten, was zu komplexen Bugs und Datenverlust führte.