Nyc­kelor­det final används i Java för att skapa element som inte kan ändras. Du kan tillämpa denna mo­di­fi­e­ra­re 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 pro­gram­me­rings­språk tillåter att befintlig kod mo­di­fie­ras och utökas efter önskemål. I Java är detta också möjligt, men det finns till­fäl­len när det är viktigt att ett element betecknas som oför­än­der­ligt. I Java kan du göra detta med hjälp av mo­di­fi­e­ra­ren final. Denna mo­di­fi­e­ra­re används för att begränsa åtkomsten till en klass, en metod eller en variabel. När en variabel har de­kla­re­rats som final kan dess värde inte ändras. En final klass kan inte utökas och en final metod kan inte åsi­do­sät­tas. Detta hjälper till att skydda mot missbruk av den delen av koden.

Sista lek­tio­ner­na

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är­led­ning av en un­der­klass. Detta gäller grund­läg­gan­de datatyper som java.lang.Math eller java.lang.String, som alltid de­kla­re­ras som slut­gil­ti­ga. Även om du av andra skäl vill förhindra att un­der­klas­ser till en hu­vud­klass 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 te­o­re­tiskt sett ska utvidga den. Därefter kommer hu­vud­klas­sen med hu­vud­me­to­den.

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

Re­sul­ta­tet 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 över­skri­vas. Detta sä­ker­stäl­ler att en metod i en un­der­klass inte kan ändra sitt avsedda beteende. För att uppnå detta de­kla­re­rar du metoden med final. Tänk dig till exempel en klass med namnet “Emperor” som in­ne­hål­ler en final metod som heter “myTitle”. En annan klass, “King”, som utökar “Emperor”, försöker över­skri­va metoden “myTitle”. I hu­vud­me­to­den 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 fel­med­de­lan­de:

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 re­sul­ta­tet får vi följande fel­med­de­lan­de:

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 ini­ti­a­li­se­ras i Java. Om du de­kla­re­rar en tom slut­gil­tig variabel kan du dock ini­ti­a­li­se­ra den med en klass­kon­struk­tö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