Nicht kontrollierte Ausnahmen (unchecked Exceptions)
Nicht kontrollierte Ausnahmen (engl. unchecked exceptions) sind Ausnahmen, die in Java nicht vom Compiler erzwungen werden. Das bedeutet: Eine Methode darf solche Ausnahmen auslösen, ohne dass in der Methodensignatur ein throws stehen muss, und Aufrufer müssen sie nicht zwingend mit try / catch behandeln.
Woran erkennt man nicht kontrollierte Ausnahmen?
Nicht kontrollierte Ausnahmen sind alle Ausnahmen, die von RuntimeException (oder einer Unterklasse davon) erben. Dazu gehören auch typische Programmierfehler, die erst zur Laufzeit sichtbar werden.
Typische Beispiele
Sehr häufig sind zum Beispiel:
- NullPointerException (Zugriff auf eine Referenz, die null ist)
- IndexOutOfBoundsException (Index ist außerhalb des gültigen Bereichs)
- IllegalArgumentException (Parameterwert ist unzulässig, obwohl der Typ stimmt)
- ArithmeticException (z. B. Division durch 0 bei int)
Was ist die Idee dahinter?
Unchecked Exceptions stehen meist für Fehler, die man durch saubere Programmierung vermeiden soll: Vorbedingungen prüfen, sinnvolle Parameterbereiche festlegen und ungültige Zustände früh abfangen. Darum zwingt Java hier nicht zur Behandlung, sondern erlaubt es, solche Fehler bei Bedarf gezielt abzufangen.
Wann wirft man selbst eine unchecked Exception?
Sehr üblich ist es, bei ungültigen Parametern bewusst eine IllegalArgumentException zu werfen. Beispiel: Eine Methode erwartet einen Index im Bereich 0 bis array.length - 1. Wenn der Index außerhalb liegt, ist das ein Fehler im Methodenaufruf - also ein typischer Fall für eine nicht kontrollierte Ausnahme.
Beispiel
private Object[] elementData;
private int size;
public ArrayTools(int startKapazitaet)
{
if (startKapazitaet <= 0)
throw new IllegalArgumentException
("Ungültige Startkapazität: " + startKapazitaet);
elementData = new Object[startKapazitaet];
size = 0;
}
Wenn der Parameter startKapazitaet einen Wert <= 0 hat, wird eine Exception geworfen:
throw new IllegalArgumentException(Klartext-Fehlermeldung);
Die Methode, die den Konstruktor von ArrayTools aufruft, kann sich dann mit einer try-catch-Anweisung um diese Ausnahme kümmern (Ausnahme-Behandlung). Wenn sie das nicht tut, wird die JVM die Anwendung beenden und eine entsprechende Fehlermeldung ausgeben.
Merke:
Nicht kontrollierte Ausnahmen
Nicht kontrollierte Ausnahmen sind RuntimeException-Ausnahmen: Der Compiler verlangt weder throws noch zwingend try / catch.
Quellen:
- Abts, D.: Grundkurs Java. 12. Auflage, Wiesbaden: Springer-Vieweg 2024.