# Kako uporabljati Java final za razrede, metode in spremenljivke

Ključna beseda `final` se v Javi uporablja za ustvarjanje elementov, ki jih ni mogoče spremeniti. Ta modificator lahko uporabite za razrede, metode in spremenljivke. Uporablja se zlasti za preprečevanje napak in namerne zlorabe v kodi.

## Kaj je Java `final`?

Večina programskih jezikov omogoča spreminjanje in razširjanje obstoječe kode po želji. V Javi je to prav tako mogoče, vendar obstajajo primeri, ko je ključnega pomena, da je element **označen kot nespremenljiv**. V Javi lahko to storite z uporabo modifikatorja `final`. Ta modifikator se uporablja za omejitev dostopa do razreda, metode ali spremenljivke. Ko je spremenljivka deklarirana kot končna, njene vrednosti ni mogoče spremeniti. Končnega razreda ni mogoče razširiti, končne metode pa ni mogoče prepisati. To pomaga zaščititi pred zlorabo tega dela kode.

## Zadnje ure

Če za razred uporabljate Java `final`, ga ni več mogoče razširiti. Ta pristop je zelo pogost in se v mnogih primerih uporablja za preprečevanje **izpeljave podrazreda**. To velja za osnovne podatkovne tipe, kot sta `java.lang.Math` ali `java.lang.String`, ki so vedno deklarirani kot končni. Tudi če želite iz drugih razlogov preprečiti izpeljavo podrazredov glavnega razreda, je najboljša rešitev uporaba Java `final`. V naslednjem primeru bomo ustvarili končni razred in drugi razred, ki naj bi ga teoretično razširil. Nato sledi glavni razred z glavno metodo.

```java
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();
	}
}
```

Rezultat, ki ga boste prejeli, naj bi bil podoben temu:

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

## Končne metode

Če metodo označite kot končno, je ni mogoče prepisati. S tem se zagotovi, da metoda v podrazredu ne more spremeniti svojega nameravanega delovanja. Da bi to dosegli, metodo deklarirate z modificatorjem Java `final`. Vzemite na primer razred z imenom »Emperor«, ki vključuje končno metodo z imenom »myTitle«. Druga razreda, »King«, ki razširja »Emperor«, poskuša prepisati metodo »myTitle«. V glavni metodi uporabimo primer »Prince« za dostop do metode. Koda je naslednja:

```java
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();
	}
}
```

Če zdaj uporabite ta kod, boste prejeli sporočilo o napaki:

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

## Končne spremenljivke

Java `final` se uporablja tudi za ustvarjanje spremenljivk z **vrednostmi, ki jih kasneje ni mogoče spremeniti**. To je še posebej pomembno, če morajo nekatere spremenljivke v kodi ostati nespremenjene. V naslednjem primeru bomo ustvarili spremenljivko x, ki ima vrednost 5. Nato bomo poskusili vstaviti to spremenljivko in ji dodeliti novo vrednost. Koda je videti takole:

```java
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);
	}
}
```

Ko uporabimo ukaz Java `System.out.println` za prikaz rezultata, prejmemo naslednje sporočilo o napaki:

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

### Ustvari prazne končne spremenljivke

Spremenljivke morajo biti v Javi vedno inicializirane. Če pa deklariramo prazno končno spremenljivko, jo lahko inicializiramo s konstruktorjem razreda. Tako izgleda koda:

```java
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);
	}
}
```

Če izvedete ta kod, boste kot izhod prejeli naslednji stavek:

```java
Here is your message.
```


This is a markdown version of: [https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/java-final/](https://www.ionos.com/sl-si/digitalguide/spletne-strani/razvoj-spletnih-strani/java-final/) for AI/LLM consumption.