1. java-hell.de
  2. Themen
  3. Exceptions
Thema 9 von 11

Java Exceptions lernen – try, catch, finally

Programme stürzen ab – die Frage ist nur, ob du vorbereitet bist. Du lernst, Exceptions mit try und catch abzufangen, mehrere Fehlerarten zu behandeln und mit finally aufzuräumen.

Die Übungen

Das lernst du in diesem Thema

  1. Programm stürzt ab
  2. Keine gültige Zahl
  3. Zwei Exceptions behandeln
  4. finally — immer am Ende
Übung 1 von 4

Programm stürzt ab

Manchmal passieren Dinge im Code, die Java nicht einfach so verarbeiten kann — zum Beispiel durch Null teilen.

Dann wirft Java eine Exception (Ausnahme) und das Programm stürzt ab.

Fang die Exception mit try { ... } catch (ArithmeticException e) { ... } ab und gib stattdessen Nicht durch Null! aus.

Startcode
void main() {
    int x = 10 / 0;
    IO.println(x);
}
Hintergrund
Was ist eine Exception?

Eine Exception ist ein Objekt, das Java erzeugt, wenn etwas schiefläuft. Beispiele: durch 0 teilen (ArithmeticException), auf null zugreifen (NullPointerException), ein Array-Index ist zu groß (ArrayIndexOutOfBoundsException).

Ohne try/catch wandert die Exception durch die aufrufenden Methoden nach oben. Fängt sie niemand ab, bricht das Programm ab — mit einem Stack Trace im Terminal.

Mit try/catch fängst du die Exception ab und kannst darauf reagieren, ohne dass das Programm abstürzt.

Übung 2 von 4

Keine gültige Zahl

Integer.parseInt("abc") wirft eine NumberFormatException — der Text ist keine Zahl.

Fang die Exception und gib Keine Zahl! aus statt des Werts.

Startcode
void main() {
    int zahl = Integer.parseInt("abc");
    IO.println(zahl);
}
Übung 3 von 4

Zwei Exceptions behandeln

Ein try-Block kann mehrere catch-Blöcke haben — einen pro Exception-Typ.

Der Code im Editor greift auf arr[5] zu, aber das Array hat nur 3 Elemente — eine ArrayIndexOutOfBoundsException.

Umschließe die Zeile mit try/catch und behandle beide Fälle:

  • ArrayIndexOutOfBoundsException → gib Index zu groß! aus
  • NullPointerException → gib Null! aus
Startcode
void main() {
    int[] arr = {10, 20, 30};
    IO.println(arr[5]);
}
Hintergrund
Reihenfolge der catch-Blöcke

Java geht die catch-Blöcke von oben nach unten durch und nimmt den ersten passenden. Deshalb müssen spezifischere Exceptions vor allgemeineren stehen — sonst würde der allgemeine Block alles abfangen.

Seit Java 7 kann man mehrere Exception-Typen in einem catch kombinieren: catch (IOException | SQLException e).

Übung 4 von 4

finally — immer am Ende

Der finally-Block wird immer ausgeführt — egal ob eine Exception auftrat oder nicht.

Nutzt man z.B. um Dateien oder Verbindungen sauber zu schließen.

Erweitere den Code: füge nach dem catch einen finally-Block hinzu, der Fertig. ausgibt.

Ausgabe soll sein:

Oops!
Fertig.
Startcode
void main() {
    try {
        int x = 10 / 0;
    } catch (ArithmeticException e) {
        IO.println("Oops!");
    }
}
Hintergrund
Wann läuft finally?

Immer. Egal ob der try-Block normal durchlief, eine Exception geworfen wurde (gefangen oder nicht), oder ob return aus dem try/catch rauskam. Die einzige Ausnahme: System.exit() oder ein JVM-Crash.

Seit Java 7 gibt es try-with-resources: try (Scanner s = new Scanner(...)) schließt automatisch — ohne finally nötig.

Genug gelesen. Jetzt du.

Im Tutorial schreibst du den Code selbst, drückst auf Ausführen und siehst sofort, ob dein Programm stimmt. Kein JDK, keine IDE, kein Bullshit.

Exceptions im Browser üben