- 1 Section
- 10 Lessons
- unbegrenzt
- Java Grundlagen10
- 1.1Java-Grundlagen: JDK, JVM, erstes Programm
- 1.2Variablen, Datentypen und Operatoren
- 1.3Kontrollstrukturen: if, else, switch
- 1.4Schleifen: for, while, do-while
- 1.5Arrays und Strings
- 1.6Methoden: Definition, Parameter, Rückgabe
- 1.7Fehlerbehandlung: try-catch-finally, Exceptions
- 1.8Einstieg in Klassen und Objekte
- 1.9Eingabe und Ausgabe: Scanner, System.out
- 1.10Praxisprojekt: Kleines Java-Programm von A bis Z
Fehlerbehandlung: try-catch-finally, Exceptions
Wenn du Programme schreibst, läuft selten alles glatt: Der Benutzer gibt „abc" ein wo eine Zahl erwartet wird. Eine Datei die du öffnen willst existiert nicht. Eine Internet-Verbindung bricht ab. Du teilst durch Null. Ohne Fehlerbehandlung würde dein Programm in solchen Momenten einfach abstürzen – mit einer hässlichen Fehlermeldung im Terminal. Genau dafür gibt es Exceptions (Ausnahmen) und das try-catch-Konstrukt: ein eleganter Weg, mit Fehlern umzugehen statt von ihnen überrascht zu werden.
Die Analogie: Stell dir vor, du fährst Auto. Normalerweise läuft alles glatt. Aber plötzlich – ein Reifen platzt. Hast du keinen Plan B, bist du gestrandet. Hast du aber im Kofferraum einen Ersatzreifen und Werkzeug („catch-Block"), kannst du reagieren und weiterfahren. Eine Exception ist der platte Reifen. Der try-Block ist die Fahrt. Der catch-Block ist dein Reparatur-Plan. Der finally-Block sind die Dinge, die du in jedem Fall machst – egal ob Reifen platt oder nicht (z.B. den Motor abstellen wenn du am Ziel bist).
1) Was ist eine Exception?
Eine Exception ist ein Objekt in Java, das einen Laufzeitfehler beschreibt. Wenn etwas schiefgeht, „wirft" (throw) Java automatisch eine Exception. Fängt sie keiner auf, wandert sie den Call-Stack hoch bis ganz nach oben – und dann stürzt das Programm ab. Ein typischer Crash sieht so aus:
Das nennt sich Stack-Trace. Er sagt dir genau: was ist passiert (ArithmeticException – Division durch Null), wo ist es passiert (Hello.java, Zeile 12, Methode berechne) und wer hat das aufgerufen (main, Zeile 5). Den Stack-Trace zu lesen ist eine der wichtigsten Skills beim Debuggen.
2) Die Exception-Hierarchie: Familien-Stammbaum
In Java sind Exceptions Klassen, die voneinander erben (siehe Vererbung in K40b). Es gibt eine klare Hierarchie. Klicke einen Knoten für Details:
3) try-catch-finally: der Schutzmantel
Mit try-catch schützt du Code-Bereiche, in denen Fehler auftreten könnten. Aufbau:
// Code der schiefgehen kann
int x = 10 / 0;
} catch (ArithmeticException e) {
// Wird ausgeführt WENN ArithmeticException auftritt
System.out.println("Division durch Null!");
} finally {
// Wird IMMER ausgeführt – Fehler oder nicht
System.out.println("Aufräumen");
}
Tritt im try-Block eine Exception auf, wird der try-Block sofort verlassen und Java sucht einen passenden catch-Block. Findet er einen, wird der ausgeführt – das Programm läuft danach normal weiter. Findet er keinen, wandert die Exception nach oben (zur aufrufenden Methode) bis sie irgendwo aufgefangen wird oder das Programm abstürzt.
4) Live-Tracer: try-catch in Aktion
Hier kannst du sehen wie verschiedene Fehler durch denselben try-catch laufen. Wähle einen Fehler-Typ und beobachte welcher Pfad genommen wird:
return schreibt, läuft finally noch davor. Ab Java 7 gibt es zusätzlich try-with-resources – damit werden Ressourcen automatisch geschlossen.5) Eigene Exceptions werfen mit throw
Manchmal willst du selbst einen Fehler signalisieren – etwa wenn eine ungültige Eingabe kommt und du nicht weitermachen kannst. Dafür gibt es throw:
if (geburtsjahr < 1900 || geburtsjahr > 2026) {
throw new IllegalArgumentException("Ungültiges Jahr");
}
return 2026 - geburtsjahr;
}
Bei checked Exceptions die du wirfst musst du sie zusätzlich in der Methoden-Signatur mit throws deklarieren: public void leseDatei() throws IOException. Damit weiß der Aufrufer dass die Methode diese Exception werfen kann und muss sie behandeln.
6) Die wichtigsten Exceptions in der Praxis
Diese Exceptions wirst du als FIAE-Azubi am häufigsten sehen:
| Exception | Wann? | Lösung |
|---|---|---|
| NullPointerException | Methode auf null aufgerufen | Vorher auf null prüfen |
| ArrayIndexOutOfBounds | Ungültiger Array-Index | Index gegen length prüfen |
| NumberFormatException | Integer.parseInt("abc") | Eingabe validieren |
| ArithmeticException | Integer-Division durch Null | Teiler vorher prüfen |
| IOException | Datei/Netzwerk-Operation gescheitert | try-catch + finally |
| FileNotFoundException | Datei existiert nicht | Datei vorher prüfen / fangen |
Zusammenfassung
Exception = Objekt das einen Laufzeitfehler beschreibt. throw wirft, try-catch fängt ab. try { riskanter Code } catch (Typ e) { Reaktion } finally { immer }. Hierarchie: Throwable → Exception → RuntimeException. Checked (z.B. IOException) müssen behandelt werden, unchecked (RuntimeException + Unterklassen) nicht. Klassische Programmierfehler werden meist als unchecked geworfen. Stack-Trace lesen lernen ist essenziell. finally läuft IMMER – ideal für Aufräumarbeiten. throw + throws für eigene/weitergegebene Exceptions.
