Java final: So nutzen Sie den Modifikator für Klassen, Methoden und Variablen

Das Keyword final wird in Java genutzt, um Elemente zu erstellen, die sich nicht mehr nachträglich ändern lassen. Diesen Modifikator können Sie auf Klassen, Methoden und Variablen anwenden. Er dient insbesondere dazu, Fehler und mutwilligen Missbrauch innerhalb des Codes zu verhindern.

Was ist Java final?

Die meisten Programmiersprachen bieten die Möglichkeit, bestehenden Code nach Belieben zu verändern und zu erweitern. Das ist zwar auch in Java grundsätzlich möglich, manchmal kann es aber wichtig sein, dass ein Element als unveränderbar hinterlegt wird. Der entsprechende Modifikator heißt in Java final. Er kann dazu genutzt werden, den Zugang zu einer Klasse, einer Methode oder einer Variablen einzuschränken. Der Wert einer finalen Variablen kann somit nicht mehr geändert werden, Erweiterungen für eine finale Klasse sind nicht möglich und eine finale Methode kann nicht ausgesetzt werden. Dadurch wird ein Missbrauch des jeweiligen Codeabschnitts verhindert.

Günstige Webhosting-Pakete von IONOS!

Vertrauen Sie auf flexibel skalierbares und zuverlässiges Webhosting inklusive persönlichem Berater mit IONOS!

Kostenlose Domain
SSL Zertifikat
DDoS-Schutz

Finale Klassen

Nutzen Sie Java final für eine Klasse, kann diese nicht mehr erweitert werden. Diese Herangehensweise ist sehr verbreitet, da es in vielen Fällen sinnvoll sein kann, die Ableitung einer Unterklasse zu verhindern. Das gilt insbesondere für Basis-Datentypen wie java.lang.Math oder java.lang.String, die immer als final deklariert werden. Auch wenn Sie aus anderen Gründen verhindern möchten, dass Unterklassen einer Hauptklasse abgeleitet werden können, ist Java final der beste Weg. Im folgenden Beispiel erstellen wir eine finale Klasse und eine zweite Klasse, die diese theoretisch erweitern soll. An dritter Stelle folgt die main-Klasse mit der main-Methode.

final class FinaleKlasse {
	public void beispielmethode() {
		System.out.println("Dies ist eine Methode innerhalb der final-Klasse.");
	}
}
class WeitereKlasse extends FinaleKlasse {
	public void beispielmethode() {
		System.out.println("Die Methode ist nun auch in der weiteren Klasse.");
	}
}
public class Main {
	public static void main(String[] args) {
		WeitereKlasse unsereWeitereKlasse = new WeitereKlasse();
		unsereWeitereKlasse.beispielmethode();
	}
}
java

Die Ausgabe, die Sie nun erhalten, dürfte in etwa so aussehen:

Main.java:6: error: cannot inherit from final FinaleKlasse
class WeitereKlasse extends FinaleKlasse
       ^
1 error
java

Finale Methoden

Wenn Sie eine Methode als final kennzeichnen, kann diese nicht überschrieben werden. Dies verhindert unter anderem, dass eine Methode in einer untergeordneten Klasse eine andere Bedeutung bekommen könnte. Wenn Sie dies verhindern möchten, erstellen Sie eine finale Methode mit dem Modifikator Java final. Dafür legen wir beispielsweise eine Klasse namens „Kaiser“ an, die eine finale Methode namens „meinTitel“ enthält. Die folgende Klasse „Koenig“ erweitert „Kaiser“ und versucht dabei, die Methode „meinTitel“ zu überschreiben. Für die main-Methode nutzen wir „Prinz“ und versuchen, ebenfalls auf die Methode zuzugreifen. Im Code sieht das so aus:

public class Kaiser {
	public final void meinTitel() {
		System.out.println("Ich bin der Kaiser.");
	}
}
public class Koenig extends Kaiser {
	public final void meinTitel() {
		System.out.println("Ich bin der Koenig.");
	}
}
public class Prinz {
	public static void main(String[] args) {
		Koenig meinTitel = new Koenig();
		Koenig.meinTitel();
	}
}
java

Wenn Sie diesen Code nun anwenden, erhalten Sie ebenfalls eine Fehlermeldung:

Main.java:9: error meinTitel() in Koenig cannot override meinTitel() in Kaiser public final void meinTitel() {
		^
overriden method is final
java

Finale Variablen

Java final wird auch genutzt, um Variablen so zu erstellen, dass ihr Wert nicht nachträglich geändert werden kann. Das ist vor allem dann wichtig, wenn bestimmte Variablen innerhalb des Codes immer konstant bleiben sollen. Im folgenden Beispiel erstellen wir eine Variable x, die den Wert 5 erhält. Anschließend versuchen wir, diese Variable einzubauen und ihr dabei einen neuen Wert zuzuweisen. Der entsprechende Code sieht so aus:

public class Main {
	final int x = 5;
public static void main(String[] args) {
	Main neuerWert = new Main();
	neuerWert.x = 10;
	System.out.println(neuerWert.x);
	}
}
java

Wenn wir nun den Java-Befehl System.out.println verwenden, um uns das Ergebnis anzeigen zu lassen, erhalten wir folgende Fehlermeldung:

Main.java:6: error: cannt assign a value to final variable x
	neuerWert.x = 10;
		     ^
1 error
java

Leere final-Variablen erstellen

Grundsätzlich müssen Variablen in Java initialisiert werden. Wenn Sie eine leere final-Variable deklarieren, können Sie diese jedoch mit einem Klassenkonstruktor initialisieren. Das sieht im Code beispielhaft so aus:

public class Beispiel {
	final String beispieltext;
	Beispiel() {
		beispieltext = "Hier steht Ihre Nachricht.";
	}
	public static void main(String[] args) {
		Beispiel neuesObjekt = new Beispiel();
		System.out.println(neuesObjekt.beispieltext);
	}
}
java

Wenn Sie diesen Code ausführen, erhalten Sie als Ausgabe den folgenden Satz:

Hier steht Ihre Nachricht.
java