Skip to content

Custom Exceptions ​

🟒 EinfachBearbeitet β˜‘οΈ22.03.2026

Zusammenfassung ​

Custom Exceptions sind selbst definierte Exception-Klassen, die spezifische Fehler in deiner Anwendung abbilden. Sie ermΓΆglichen prΓ€zisere Fehlerbehandlung und besseren Code.

Kernkonzept ​

Custom Exceptions erben von Exception oder RuntimeException und ermΓΆglichen es dir, domΓ€nenspezifische Fehler zu definieren. Statt generischer Exception kannst du aussagekrΓ€ftige Exceptions wie InsufficientFundsException oder UserNotFoundException werfen.

Du erstellst eine neue Klasse, die von Exception (checked) oder RuntimeException (unchecked) erbt. Mit konstruktoren fΓΌr Nachricht und Cause gibst du Kontext ΓΌber den Fehler. Der Aufrufer kann dann gezielt auf bestimmte Exceptions reagieren.

Naming-Konvention: Enden immer auf Exception. Das macht sofort klar, dass es sich um eine Exception handelt.

Code-Beispiel ​

java
// 1. Custom Exception definieren
public class InsufficientFundsException extends Exception {
    private double requiredAmount;
    private double availableAmount;
    
    // Konstruktor mit Nachricht
    public InsufficientFundsException(String message) {
        super(message);
    }
    
    // Konstruktor mit Details
    public InsufficientFundsException(String message, 
                                     double required, 
                                     double available) {
        super(message);
        this.requiredAmount = required;
        this.availableAmount = available;
    }
    
    public double getShortfall() {
        return requiredAmount - availableAmount;
    }
}

// 2. Custom Exception werfen
class BankAccount {
    private double balance = 100.0;
    
    public void withdraw(double amount) throws InsufficientFundsException {
        if (amount > balance) {
            throw new InsufficientFundsException(
                "Nicht genug Deckung!", 
                amount, 
                balance
            );
        }
        balance -= amount;
    }
}

// 3. Custom Exception fangen
public class Main {
    public static void main(String[] args) {
        BankAccount account = new BankAccount();
        
        try {
            account.withdraw(150.0);
        } catch (InsufficientFundsException e) {
            System.out.println("Fehler: " + e.getMessage());
            System.out.println("Fehlbetrag: " + e.getShortfall());
        }
    }
}

Wichtige Punkte ​

  • Extends Exception = Checked Exception β†’ muss deklariert/gefangen werden
  • Extends RuntimeException = Unchecked Exception β†’ optional zu fangen
  • Custom Exceptions sollten aussagekrΓ€ftige Namen haben (endend auf "Exception")
  • Immer Konstruktoren mit String message und optional Throwable cause bereitstellen
  • Custom Exceptions ermΓΆglichen spezifische catch-BlΓΆcke statt generischer Error-Handling
  • Verwende sie fΓΌr domΓ€nenspezifische Fehler, nicht fΓΌr technische Fehler

Klassische Fragen ​

Sollte ich Exception oder RuntimeException erweitern? ​

Exception fΓΌr vorhersehbare Business-Fehler (z.B. UserNotFoundException), die der Aufrufer handhaben sollte. RuntimeException fΓΌr Programmierungsfehler oder Fehler, die nicht sinnvoll abgefangen werden kΓΆnnen. Die meisten Custom Exceptions sollten Exception erweitern.


Wie unterscheidet sich Custom Exception vom Fehlercode? ​

Mit Exceptions wirfst du sprechende Objekte statt magischer Fehlernummern. Der Aufrufer sieht sofort, welcher Fehler auftrat, und kann mit gezielten catch-BlΓΆcken reagieren. Fehlercodes sind 1990er-Jahre-Code.


Kann ich mehrere Exceptions in einem catch-Block fangen? ​

Ja, seit Java 7 mit Multi-Catch: catch (InsufficientFundsException | InvalidAccountException e). Das erspart Code-Duplikation.


Wusstest du schon? ​

Die beste Custom Exception ist diejenige, die du nie werfen musst! Viele Senior-Entwickler bevorzugen Null-Objects oder Optional ΓΌber Exceptions fΓΌr nicht-kritische Fehler. Exceptions sollten exceptional sein, nicht dein Standard-Kontrollfluss. πŸ’‘