Das Keyword final wird in Java genutzt, um Elemente zu erstellen, die sich nicht mehr nach­träg­lich ändern lassen. Diesen Mo­di­fi­ka­tor können Sie auf Klassen, Methoden und Variablen anwenden. Er dient ins­be­son­de­re dazu, Fehler und mut­wil­li­gen Miss­brauch innerhalb des Codes zu ver­hin­dern.

Was ist Java final?

Die meisten Pro­gram­mier­spra­chen bieten die Mög­lich­keit, be­stehen­den Code nach Belieben zu verändern und zu erweitern. Das ist zwar auch in Java grund­sätz­lich möglich, manchmal kann es aber wichtig sein, dass ein Element als un­ver­än­der­bar hin­ter­legt wird. Der ent­spre­chen­de Mo­di­fi­ka­tor heißt in Java final. Er kann dazu genutzt werden, den Zugang zu einer Klasse, einer Methode oder einer Variablen ein­zu­schrän­ken. Der Wert einer finalen Variablen kann somit nicht mehr geändert werden, Er­wei­te­run­gen für eine finale Klasse sind nicht möglich und eine finale Methode kann nicht aus­ge­setzt werden. Dadurch wird ein Miss­brauch des je­wei­li­gen Code­ab­schnitts ver­hin­dert.

Web­hos­ting
Das beste Web­hos­ting zum Spit­zen­preis
  • 3x schneller und 60 % günstiger
  • Maximale Ver­füg­bar­keit mit > 99.99 %
  • Nur bei IONOS: Bis zu 500 GB Spei­cher­platz inklusive

Finale Klassen

Nutzen Sie Java final für eine Klasse, kann diese nicht mehr erweitert werden. Diese Her­an­ge­hens­wei­se ist sehr ver­brei­tet, da es in vielen Fällen sinnvoll sein kann, die Ableitung einer Un­ter­klas­se zu ver­hin­dern. Das gilt ins­be­son­de­re für Basis-Da­ten­ty­pen wie java.lang.Math oder java.lang.String, die immer als final de­kla­riert werden. Auch wenn Sie aus anderen Gründen ver­hin­dern möchten, dass Un­ter­klas­sen einer Haupt­klas­se ab­ge­lei­tet werden können, ist Java final der beste Weg. Im folgenden Beispiel erstellen wir eine finale Klasse und eine zweite Klasse, die diese theo­re­tisch 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 kenn­zeich­nen, kann diese nicht über­schrie­ben werden. Dies ver­hin­dert unter anderem, dass eine Methode in einer un­ter­ge­ord­ne­ten Klasse eine andere Bedeutung bekommen könnte. Wenn Sie dies ver­hin­dern möchten, erstellen Sie eine finale Methode mit dem Mo­di­fi­ka­tor Java final. Dafür legen wir bei­spiels­wei­se 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 über­schrei­ben. Für die main-Methode nutzen wir „Prinz“ und versuchen, ebenfalls auf die Methode zu­zu­grei­fen. 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 Feh­ler­mel­dung:

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 nach­träg­lich 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. An­schlie­ßend versuchen wir, diese Variable ein­zu­bau­en und ihr dabei einen neuen Wert zu­zu­wei­sen. Der ent­spre­chen­de 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 Feh­ler­mel­dung:

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

Leere final-Variablen erstellen

Grund­sätz­lich müssen Variablen in Java in­itia­li­siert werden. Wenn Sie eine leere final-Variable de­kla­rie­ren, können Sie diese jedoch mit einem Klas­sen­kon­struk­tor in­itia­li­sie­ren. Das sieht im Code bei­spiel­haft 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
Zum Hauptmenü