Nyckelordet final används i Java för att skapa element som inte kan ändras. Du kan tillämpa denna modifierare på klasser, metoder och variabler. Den används särskilt för att förhindra fel och avsiktlig missbruk inom koden.

Vad är Java final?

De flesta programmeringsspråk tillåter att befintlig kod modifieras och utökas efter önskemål. I Java är detta också möjligt, men det finns tillfällen när det är viktigt att ett element betecknas som oföränderligt. I Java kan du göra detta med hjälp av modifieraren final. Denna modifierare används för att begränsa åtkomsten till en klass, en metod eller en variabel. När en variabel har deklarerats som final kan dess värde inte ändras. En final klass kan inte utökas och en final metod kan inte åsidosättas. Detta hjälper till att skydda mot missbruk av den delen av koden.

Sista lektionerna

Om du använder Java final för en klass kan den inte längre utökas. Denna metod är mycket vanlig och används i många fall för att förhindra härledning av en underklass. Detta gäller grundläggande datatyper som java.lang.Math eller java.lang.String, som alltid deklareras som slutgiltiga. Även om du av andra skäl vill förhindra att underklasser till en huvudklass härleds är det bäst att använda Java final. I följande exempel ska vi skapa en slutlig klass och en andra klass som teoretiskt sett ska utvidga den. Därefter kommer huvudklassen med huvudmetoden.

final class FinalClass {
	public void exampleMethod() {
		System.out.println("This is a method within the final class.");
	}
}
class AdditionalClass extends FinalClass {
	public void exampleMethod() {
		System.out.println("The method is now also available in the additional class.");
	}
}
public class Main {
	public static void main(String[] args) {
		AdditionalClass ourAdditionalClass = new AdditionalClass();
		ourAdditionalClass.exampleMethod();
	}
}
java

Resultatet du får bör se ut ungefär så här:

Main.java:6: error: cannot inherit from final FinalClass
class AdditionalClass extends FinalClass
       ^
1 error
java

Slutliga metoder

Om du markerar en metod som final kan den inte överskrivas. Detta säkerställer att en metod i en underklass inte kan ändra sitt avsedda beteende. För att uppnå detta deklarerar du metoden med final. Tänk dig till exempel en klass med namnet “Emperor” som innehåller en final metod som heter “myTitle”. En annan klass, “King”, som utökar “Emperor”, försöker överskriva metoden “myTitle”. I huvudmetoden använder vi en instans av “Prince” för att komma åt metoden. Koden ser ut som följer:

public class Emperor {
	public final void myTitle() {
		System.out.println("I am the emperor.");
	}
}
public class King extends Emperor {
	public final void myTitle() {
		System.out.println("I am the king.");
	}
}
public class Prince {
	public static void main(String[] args) {
		King myTitle = new King();
		King.myTitle();
	}
}
java

Om du nu tillämpar denna kod kommer du att få ett felmeddelande:

Main.java:9: error myTitle() in King cannot override myTitle() in Emperor public final void myTitle() {
		^
overridden method is final
java

Slutliga variabler

Java final används också för att skapa variabler med värden som inte kan ändras i efterhand. Detta är särskilt viktigt om vissa variabler ska förbli konstanta inom koden. I följande exempel ska vi skapa variabeln x, som har värdet 5. Vi ska sedan försöka infoga denna variabel och tilldela den ett nytt värde. Koden ser ut så här:

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

När vi använder Java-kommandot System.out.println för att visa resultatet får vi följande felmeddelande:

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

Skapa tomma slutliga variabler

Variabler måste alltid initialiseras i Java. Om du deklarerar en tom slutgiltig variabel kan du dock initialisera den med en klasskonstruktör. Så här ser koden ut:

public class Example {
	final String exampleText;
	Example() {
		exampleText = "Here is your message.";
	}
	public static void main(String[] args) {
		Example newObject = new Example();
		System.out.println(newObject.exampleText);
	}
}
java

Om du kör den här koden får du följande mening som utdata:

Here is your message.
java
Gå till huvudmeny