ProgrammierungBackend Java Entwickler

Was sind Ausnahmen (exceptions) in Java? Erklären Sie den Unterschied zwischen checked und unchecked exceptions und wann welche Kategorie verwendet werden sollte.

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort

Ausnahmen (exceptions) sind ein Mechanismus zur Fehlerbehandlung in Java. Jedes geworfene Objekt ist eine abgeleitete Klasse von Throwable. Es gibt zwei Hauptkategorien:

  • Checked exceptions (Nachfahren von Exception, außer RuntimeException): müssen ausdrücklich behandelt oder in der Methodensignatur durch throws deklariert werden.
  • Unchecked exceptions (Nachfahren von RuntimeException): müssen nicht ausdrücklich behandelt werden, können überall auftreten (z. B. NullPointerException).

Wann verwenden?

  • Checked — für erwartete Fehler, die behandelt werden können (z. B. Datei- oder Netzwerkfehler).
  • Unchecked — für Fehler, die auf Programmfehler hinweisen (z. B. falscher Array-Index).
Beispielcode
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 }

Fangfrage

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 }

Beispiele für reale Fehler aufgrund mangelnder Kenntnisse über die Feinheiten des Themas


Geschichte

In einer Internetbank beschloss der Kunde, die Behandlung von SQLExceptions zu 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.