⚡ Lehrpfad 3: Generics, Collections & Modern Streams

Java 11: Exceptions & Try-with-Resources

Lerne robustes Enterprise-Fehlermanagement: Checked vs. Unchecked Exceptions, saubere Exception-Hierarchien und automatisches Schließen via AutoCloseable.

📂 Dateien dieser Lerneinheit:
📄 Aufgabe.java (Startercode) 🧪 TestAufgabe.java (Tests) 💡 Musterloesung.java (Lösung) 📖 README.md

⚠️ 1. Checked vs. Unchecked Exceptions

In Java gibt es zwei Hauptkategorien von Ausnahmen:

Checked Exceptions (extends Exception)

Compiler fordert Behandlung per try-catch oder throws. Für vorhersehbare Fehler im Systemumfeld (Netzwerk, I/O, Payment).

Unchecked Exceptions (extends RuntimeException)

Keine Deklarationspflicht. Signalisiert Programmierfehler (NullPointer, IndexOutOfBounds) oder Invarianten-Verletzung.

🛡️ 2. Sichere Ressourcenverwaltung mit try-with-resources

Jede Klasse, die java.lang.AutoCloseable implementiert, kann innerhalb runder Klammern in einem try(...) Block deklariert werden. Die JVM ruft am Ende garantiert die close()-Methode auf – selbst wenn unvorhergesehene Ausnahmen auftreten.

try (AuditLogSession session = new AuditLogSession("TXN-100")) {
    session.log("Transaktion gestartet");
    bankAccount.transfer(target, amount);
    session.log("Transaktion abgeschlossen");
} catch (InsufficientFundsException e) {
    logger.error("Überziehung verhindert: " + e.getMessage());
} // session.close() wird HIER deterministisch ausgeführt!
🏢 Didaktische Analogie: Das Sicherheitsschleusen-System im Hochsicherheitstrakt

Ein Mitarbeiter betritt den Serverraum mit einer Zutrittskarte (AutoCloseable). try-with-resources ist die automatische Drucktür: Egal, ob der Techniker seine Arbeit erfolgreich beendet oder wegen eines Feueralarms fluchtartig den Raum verlässt – die Schleuse verriegelt sich beim Verlassen stets von selbst und verhindert jedes Datenleck!

📑 3. Cheat-Sheet: Exception Best Practices

Muster Code-Beispiel Empfehlung
Try-With-Resources try (Resource r = new Resource()) Immer bevorzugen vor manuellen finally-Blöcken
Multi-Catch catch (SQLException | IOException e) Verhindert redundanten Code für gleichwertiges Handling
Exception Chaining throw new ServiceException("...", cause); Niemals den Original-Stacktrace verwerfen (Ursache erhalten)
Specific Exceptions throw new IllegalArgumentException(...) Niemals generisches throw new Exception() werfen

🧠 Diagnostischer Selbst-Check

Überprüfe dein Verständnis von Sprach-Features, Speicherverwaltung und Enterprise-Architektur, bevor du den Code in der Web-IDE schreibst.

🎯 Aufgaben & Checkliste in Aufgabe.java

💡 Enterprise Architect Tipp: Leere Catch-Blöcke vermeiden

Ein leerer catch (Exception e) {} Block („Swallowed Exception“) ist eine der gefährlichsten Fehlerquellen im Enterprise-Umfeld. Mindestens loggen oder als Business-Exception weiterwerfen!

💻 In Web-IDE öffnen → Weiter zu Java 12: Streams API & Lambdas →