20% off with code ERSTIS26
5 min read 30 Jun 2026

Java final Keyword: Klassen, Methoden & Variablen

Das Java final Keyword regelt Unveränderlichkeit. Erfahre hier alles über finale Klassen, Methoden und Variablen für deinen Start in die IT.

Marcel Schmidtpeter By Marcel Schmidtpeter 30 Jun 2026
Java final Keyword: Klassen, Methoden & Variablen

Du schreibst eine Klasse für eine Bank-Anwendung. Die Kontonummer darf sich nach der Erstellung nie ändern. Wie stellst du sicher, dass niemand - weder ein anderer Entwickler im Team noch du selbst um 3 Uhr nachts - aus Versehen die Kontonummer überschreibt? Genau hier kommt das Java final Keyword ins Spiel.

Es ist ein Modifikator, der Veränderungen blockiert - sei es bei Variablen, Methoden oder ganzen Klassen. Dabei ist final nicht nur für Fachinformatiker-Azubis im 1. Lehrjahr relevant. Auch im Informatik-Studium und im Berufsalltag als Softwareentwickler wirst du dem Keyword ständig begegnen - sei es in Frameworks, in Code-Reviews oder bei der Arbeit mit Standard-APIs.

Was ist das Java final Keyword?

Das Java final Keyword ist ein Schlüsselwort, das Veränderungen an Code-Elementen verhindert. Du kannst es auf drei Ebenen einsetzen: Variablen, Methoden und Klassen. Je nachdem, wo du es setzt, bewirkt es etwas anderes. Das kann am Anfang verwirrend sein, aber die Grundidee bleibt gleich: "Final" bedeutet "endgültig - nicht mehr veränderbar".

Die offizielle Oracle Java Documentation beschreibt final als Modifikator, der genau einmal zugewiesen werden darf.

Merke: "Final" heißt nicht zwingend "unveränderlich", sondern "kann nicht neu zugewiesen werden". Bei Objekten kannst du die inneren Werte trotzdem noch ändern.

Wie funktioniert final bei Variablen?

Eine final-Variable darf nach ihrer ersten Zuweisung keinen neuen Wert mehr erhalten. Stell dir vor, du kaufst ein Auto mit festem Kennzeichen - das Kennzeichen bleibt immer gleich, du kannst es nicht einfach austauschen.

java
public class Beispiel {

  public static void main(String[] args) {
    final int MAX_KLASSEN = 30;
    MAX_KLASSEN = 35; // Kompilierfehler!
  }
}

Das gilt aber nur für die Referenz (den Verweis auf einen Speicherort), nicht für den Inhalt des Objekts. Bei einem finalen Array oder Objekt kannst du die inneren Werte weiterhin verändern:

java
public class ReferenzBeispiel {

  public static void main(String[] args) {
    final int[] zahlen = { 1, 2, 3 };
    zahlen[0] = 99; // Erlaubt, da Inhalt veraendert wird
    zahlen = new int[5]; // Fehler! Neue Zuweisung ist blockiert
  }
}

Merke: final bei Referenztypen (Objekte, Arrays) blockiert nur die Neuzuweisung der Referenz, nicht die Änderung der Objektdaten.

Ein Sonderfall sind final Parameter. Wenn du einen Parameter in einer Methode als final markierst, kannst du ihn innerhalb der Methode nicht neu zuweisen. Das ist nützlich, um Seiteneffekte zu vermeiden und den Code lesbarer zu machen.

Konstanten werden in Java typischerweise als `public static final` deklariert. Wenn du mehr darüber lesen willst, schau dir unseren Beitrag zu Java Konstanten mit final an. Auch Getter und Setter spielen bei finalen Variablen eine Rolle: Für finale Felder gibt es logischerweise keinen Setter, der den Wert verändert.

Wann nutzt man final bei Methoden?

Eine final-Methode kann von Unterklassen nicht überschrieben werden. Überschreiben bedeutet, dass eine Kindklasse eine Methode aus der Elternklasse mit neuem Verhalten ersetzt - ein zentrales Konzept der Vererbung, das wir in unserem Guide zur Java Vererbung genauer erklären.

Warum sollte man eine Methode als final markieren? Stell dir vor, du hast eine sicherheitsrelevante Methode wie `pruefePasswort()`. Wenn jemand deine Klasse ableitet und diese Methode überschreibt, könnte er die Passwortprüfung umgehen. Mit final verhinderst du genau das.

java
public class Sicherheitsklasse {

  // Diese Methode kann nicht ueberschrieben werden
  public final boolean pruefePasswort(String eingabe) {
    return eingabe.equals("geheim123");
  }
}

class HackerKlasse extends Sicherheitsklasse {

  // Fehler: pruefePasswort ist final!
  @Override
  public boolean pruefePasswort(String eingabe) {
    return true; // Sollte immer true zurueckgeben
  }
}

Mehr dazu, wie Methoden generell funktionieren, findest du in unserem Artikel zu Java Methoden definieren und aufrufen.

Warum sollte man eine Klasse final machen?

Eine final-Klasse kann nicht als Elternklasse für andere Klassen verwendet werden. Stell dir vor, du hast eine Klasse entwickelt, die für einen speziellen Zweck perfekt optimiert ist. Wenn andere davon erben und eigene Logik einbauen, könnte das zu schweren Bugs führen.

Das bekannteste Beispiel aus der Java-Standardbibliothek ist `String`. Die Klasse `java.lang.String` ist final, weil Strings in Java besonders sicher und effizient gehandhabt werden müssen.

java
public final class SichereKlasse {

  private int wert;

  public SichereKlasse(int wert) {
    this.wert = wert;
  }

  public int getWert() {
    return wert;
  }
}

// Fehler: SichereKlasse ist final!
class Unterklasse extends SichereKlasse {
  // ...
}

Die offizielle String-Dokumentation von Oracle zeigt, dass die Klasse als `final` deklariert ist. Das ist eine bewusste Design-Entscheidung, um die Immutability (Unveränderlichkeit) von Strings zu garantieren.

Übersicht: Wann setzt du final ein?

Hier ist eine kurze Übersicht, die dir hilft, den richtigen Kontext für das Java final Keyword zu finden:

Element

Was blockiert wird

Typischer Anwendungsfall

final Variable

Neuzuweisung des Werts

Konstanten wie `MAX_GROESSE`

final Methode

Überschreiben in Subklassen

Sicherheitskritische Logik

final Klasse

Vererbung komplett

Vollständige Kontrolle über Verhalten

final Parameter

Änderung innerhalb der Methode

Vermeidung von Seiteneffekten

Praxisbeispiel: Eine Konfigurationsklasse

Stell dir vor, du baust eine Klasse für Server-Konfiguration. Manche Werte sind fix (Port), andere können intern angepasst werden:

java
public final class ServerConfig {

  // Konstanten - koennen nicht mehr geaendert werden
  public static final int DEFAULT_PORT = 8080;
  public static final String PRODUKTION = "PROD";

  private final String serverName;
  private final int port;
  private int anzahlVerbindungen;

  public ServerConfig(String serverName, int port) {
    this.serverName = serverName;
    this.port = port;
    this.anzahlVerbindungen = 0;
  }

  // final Methode: Berechnung darf nicht geaendert werden
  public final String getVolleAdresse() {
    return serverName + ":" + port;
  }

  public int getAnzahlVerbindungen() {
    return anzahlVerbindungen;
  }

  public void erhoeheVerbindungen() {
    anzahlVerbindungen++;
  }

  public static void main(String[] args) {
    ServerConfig server = new ServerConfig("localhost", 8080);
    System.out.println("Server: " + server.getVolleAdresse());
    server.erhoeheVerbindungen();
    server.erhoeheVerbindungen();
    System.out.println("Verbindungen: " + server.getAnzahlVerbindungen());
  }
}

Die Klasse ist `final` - niemand kann davon erben. `serverName` und `port` sind unveränderlich nach der Konstruktion. Die Konstanten `DEFAULT_PORT` und `PRODUKTION` sind klassenweit verfügbar. Wenn du mehr über das Zusammenspiel mit static wissen willst, schau in unseren Guide zum Java static Keyword.

Häufige Fehler beim Einsatz von final

1. Leere final-Variablen vergessen zuzuweisen

Eine finale Variable muss genau einmal zugewiesen werden - spätestens im Konstruktor:

java
public class FehlerDemo {

  private final int wichtigerWert; // Fehler: muss initialisiert werden

  public FehlerDemo() {
    // Hier fehlt: this.wichtigerWert = 42;
  }
}

Lösung: Weise den Wert direkt bei der Deklaration oder im Konstruktor zu.

2. Glauben, final macht Objekte unveränderlich

Wie oben erwähnt: final blockiert die Neuzuweisung, nicht die Inhaltsänderung. Wenn du ein wirklich unveränderliches Objekt willst, brauchst du das Konzept der Immutable Objects. Das bedeutet: alle Felder sind final, es gibt keine Setter und keine Methoden, die den internen Zustand ändern.

3. final vergessen bei Konstanten

Konstanten ohne `final` sind ein häufiger Anfängerfehler. Warum? Weil jemand den Wert aus Versehen ändern könnte. So definierst du es richtig:

java
// Falsch
public static int MAX_USERS = 100; // Jeder kann das aendern!

// Richtig
public static final int MAX_USERS = 100; // Unveraenderlich

Übungstipp: Baue eine Auto-Klasse

Erstelle eine Klasse `Auto` mit folgenden Anforderungen:

  • Ein `final` Attribut `fahrgestellnummer` (wird im Konstruktor gesetzt und nie geändert)

  • Ein normales Attribut `aktuelleGeschwindigkeit`

  • Eine `final` Methode `bremseAb()`, die die Geschwindigkeit um 10 verringert

So überprüfst du, ob du die drei Ebenen von final verstanden hast. Tipp: Überlege dir, ob `Auto` als Ganzes final sein sollte oder ob Vererbung hier Sinn macht - zum Beispiel für ein `ElektroAuto`.

FAQ

Kann man final rückgängig machen?

Nein. Sobald ein Element `final` ist, bleibt es final. Es gibt keinen Modifikator wie `nonfinal` oder ähnliches. Willst du die Eigenschaft später ändern, musst du das `final` im Quellcode entfernen und neu kompilieren.

Was ist der Unterschied zwischen final und static?

`final` verhindert Veränderungen (Neuzuweisung), `static` bedeutet, dass ein Element zur Klasse gehört und nicht zu einer Instanz (einem konkreten Objekt). Beide sind unabhängig voneinander. Mehr dazu im Guide zu Java static.

Warum ist String in Java final?

Die Klasse `String` ist final, damit niemand durch Vererbung die Funktionalität verändern kann. Das ist wichtig für die Sicherheit (z.B. bei Passwörtern) und die Performance (String-Pooling, Caching). Details findest du in der Oracle String-Dokumentation.

Sollte ich jede Variable final machen?

Nein. Das würde den Code unnötig aufblähen. Nutze final bewusst: für Konstanten, für Parameter, die nicht verändert werden sollen, und für Felder, die nach der Konstruktion unveränderlich sein müssen. In der Praxis markieren viele Entwickler lokale Variablen automatisch als final - das ist Geschmackssache.

Was bedeutet "effectively final"?

Eine Variable ist effectively final (effektiv final), wenn sie zwar nicht das Schlüsselwort `final` hat, aber nach der ersten Zuweisung nie wieder verändert wird. Das ist relevant für Lambda-Ausdrücke (kurze Funktionen, die als Parameter übergeben werden). Dort dürfen nur finale oder effektiv finale Variablen verwendet werden.

Fazit

Das Java final Keyword ist dein Werkzeug, um Code vor unbeabsichtigten Veränderungen zu schützen. Es macht deine Programme sicherer, robuster und besser verständlich. Die drei Ebenen - Variablen, Methoden, Klassen - decken praktisch alle Szenarien ab, in denen du Kontrolle über die Veränderbarkeit behalten willst.

Wenn du im Studium oder deiner Ausbildung Schwierigkeiten mit Java-Konzepten hast, musst du nicht allein durch die Prüfung rennen. Bei study-it.education findest du individuelle IT-Nachhilfe, die genau da ansetzt, wo du feststeckst - egal ob bei Java, C# oder anderen IT-Themen. Schau vorbei und bring deine Java-Kenntnisse auf das nächste Level.


First chat · 0 € · 30 min

Need someone to walk through this with you?

Instead of re-reading: 30 min with a senior dev.

Book a free first chat →
About the author
Marcel Schmidtpeter
Marcel Schmidtpeter

Das Java final Keyword regelt Unveränderlichkeit. Erfahre hier alles über finale Klassen, Methoden und Variablen für deinen Start in die IT.

marcel.schmidtpeter@study-it.education →
Keep reading

More reading