# Nachdenkzettel: Wahlpflicht Exceptions

##  1. Fehler im Exception-Handler

Was ist falsch mit der Struktur und dem Verhalten der Exception-Handlers in folgendem Code? Benennen Sie die Fehler und erklären Sie, wie Sie diese beheben würden.

```java
public class PaymentService {

    public static void main(String[] args) {
        try {
            processPayment();
            System.out.print("Zahlung erfolgreich ");
        } catch (Exception ex) {
            System.out.print("Zahlung fehlgeschlagen ");
        } finally {
            System.out.print("Transaktion beendet ");
        }

        System.out.print("System läuft weiter");
    } 

    public static void processPayment() {
        throw new Error("Kritischer Systemfehler im Payment-Provider");
    }
}
```

## 2. Fehler bei der Reservierung

Ein Bezahlsystem reserviert beim Bestellvorgang Artikel. Dabei soll **immer** eine Ausgabe in die Konsole geschrieben werden, wenn etwas schiefgeht. Die Methode kann den Fehler jedoch nicht selbst beheben.

```java
public class InventoryService {

    public static void reserveItems(String productId, int amount) {
        try {
            checkStock(productId, amount);
            System.out.println("Artikel reserviert");
        } catch (IllegalStateException e) {
            System.err.println("Fehler bei der Reservierung: " + e.getMessage()); 
        }
    }

    private static void checkStock(String productId, int amount) {
        throw new IllegalStateException("Nicht genügend Bestand");
    }
}
```

a) Erklären Sie, warum das bloße Abfangen der Exception hier problematisch ist.
b) Ergänzen Sie den Code so, dass der Fehler korrekt ausgegeben wird und der Aufrufer über den Fehler informiert wird.
c) Begründen Sie, warum re-throwing in diesem Szenario sinnvoll ist.

## 3. Fehlende Daten
In dem Bezahlsystem wird zur Laufzeit festgestellt, dass eine Kunden-ID nicht mehr in der Datenbank vorhanden ist. 

Ist dies eher
   - eine System-Exception?
   - eine Custom-Exception?
   - eine delegierte Exception (hier z.B. SQLException)?
   - keine Exception?

Begründen Sie Ihre Antwort.

## 4. Exceptions in Ihrem Projekt
a) Zeigen Sie, welche Exceptions Sie implementieren.
b) Brainstormen Sie kurz mit einer KI/LLM Ihrer Wahl, ob und welche Exceptions in Ihrem Projekt Sinn machen? Beschreiben Sie Ihr Projekt dabei so gut es geht, um mögliche Fehlerquellen früh zu identifizieren.