Constants (final)
Kurz: Eine Variable, deren Wert nach der Zuweisung nicht mehr geändert werden kann — in Java per final-Schlüsselwort markiert.
Genauer: Konstanten machen Code sicherer und lesbarer: der Compiler verhindert versehentliches Überschreiben, und ein aussagekräftiger Name (z. B. MAX_RETRIES) ersetzt “magische Zahlen” im Code. Konvention in vielen Sprachen: Konstanten komplett in Großbuchstaben mit Unterstrichen schreiben (SCREAMING_SNAKE_CASE).
Im Detail
Grundlegende Nutzung
final int MAX_RETRIES = 3;
final String API_URL = "https://api.beispiel.de";
// final gehört auch zu Methodenparametern und Klassen
final class Konfiguration { } // kann nicht mehr geerbt werden
void verarbeite(final int wert) {
// "wert" kann innerhalb der Methode nicht mehr verändert werden
}Flache vs. tiefe Unveränderlichkeit
Wichtig: final bei einem Objekt (statt einem primitiven Wert wie int) verhindert nur, dass die Variable auf ein anderes Objekt zeigen kann (“Reference Immutability”) — der Inhalt des Objekts selbst kann trotzdem veränderbar bleiben, wenn seine Klasse das erlaubt. Eine final List<String> etwa kann weiterhin Elemente hinzugefügt bekommen (liste.add("neu") funktioniert), nur die Variable selbst kann nicht mehr auf eine komplett andere Liste umgebogen werden (liste = neueListe wäre ein Kompilierfehler). Für echte, tiefe Unveränderlichkeit (Immutability, bei der auch der Objektinhalt nie mehr verändert werden kann) braucht es zusätzlich ein von Grund auf unveränderliches Objekt — z. B. List.of(...) statt einer normalen ArrayList, oder ein Record mit ausschließlich final-Feldern.
final auf Klassen- und Methodenebene
Neben Variablen lässt sich final auch auf Klassen (die dann nicht mehr vererbt/erweitert werden können — String in Java ist selbst final, aus Sicherheits- und Performancegründen) und Methoden (die dann in Unterklassen nicht mehr überschrieben werden können) anwenden. Das ist ein bewusstes Designwerkzeug: eine final-Klasse signalisiert “diese Implementierung ist vollständig, keine Erweiterung vorgesehen”, was Missbrauch und unerwartetes Verhalten durch Unterklassen verhindert.
Namenskonvention und Nutzen
Konstanten werden oft für Konfigurationswerte, mathematische Konstanten oder Fehlercodes verwendet, die sich zur Laufzeit nie ändern sollen. Konvention in vielen Sprachen: Konstanten komplett in Großbuchstaben mit Unterstrichen schreiben (SCREAMING_SNAKE_CASE, z. B. MAX_RETRIES), um sie visuell sofort von normalen, veränderlichen Variablen zu unterscheiden — allein am Namen erkennt man, dass sich dieser Wert nie ändert. Der große praktische Nutzen liegt darin, dass ein Fehler (versehentliches Ändern eines Werts, der eigentlich konstant bleiben sollte) schon beim Kompilieren erkannt wird, statt erst als schwer nachvollziehbarer Bug zur Laufzeit aufzufallen — ein klassisches Beispiel für “Fail Fast”: lieber früh und klar scheitern als spät und mysteriös.
final als Sicherheitsmechanismus für Multithreading
In nebenläufigem Code (mehrere Threads gleichzeitig) sind final-Felder besonders wertvoll: weil sich ihr Wert nach der Initialisierung nie ändert, können mehrere Threads gleichzeitig lesend darauf zugreifen, ohne dass eine explizite Synchronisation nötig wäre — ein häufiges Muster, um Race Conditions (fehlerhafte Ergebnisse durch gleichzeitigen, unkoordinierten Zugriff) von vornherein auszuschließen, statt sie nachträglich mit Locks zu verhindern.
Siehe auch: Declaring Variables