# Kā izmantot Java final klases, metodes un mainīgos

Atslēgvārds `final` tiek izmantots Java, lai izveidotu elementus, kurus nevar mainīt. Šo modifikatoru var piemērot klasēm, metodēm un mainīgajiem. Tas tiek izmantots, lai novērstu kļūdas un apzinātu ļaunprātīgu izmantošanu kodā.

## Kas ir Java `final`?

Lielākā daļa programmēšanas valodu ļauj esošo kodu modificēt un paplašināt pēc vajadzības. Java valodā tas arī ir iespējams, bet ir gadījumi, kad ir ļoti svarīgi, lai elements tiktu **atzīts par nemaināmu**. Java valodā to var izdarīt, izmantojot `final` modifikatoru. Šo modifikatoru izmanto, lai ierobežotu piekļuvi klasei, metodei vai mainīgajam. Kad mainīgais ir deklarēts kā galīgs, tā vērtību nevar mainīt. Galīgo klasi nevar paplašināt, un galīgo metodi nevar pārrakstīt. Tas palīdz aizsargāt pret šīs koda daļas ļaunprātīgu izmantošanu.

## Pēdējās nodarbības

Ja klasē izmantojat Java `final`, to vairs nevar paplašināt. Šī pieeja ir ļoti izplatīta, un daudzos gadījumos to izmanto, lai novērstu **apakšklases atvasināšanu**. Tas attiecas uz pamata datu tipiem, piemēram, `java.lang.Math` vai `java.lang.String`, kas vienmēr tiek deklarēti kā galīgi. Pat ja vēlaties novērst galvenās klases apakšklases atvasināšanu citu iemeslu dēļ, vislabākais veids ir izmantot Java `final`. Turpmākajā piemērā mēs izveidosim galīgo klasi un otro klasi, kurai teorētiski tā būtu jāpaplašina. Pēc tam seko galvenā klase ar galveno metodi.

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

Rezultāts, ko saņemsiet, izskatīsies aptuveni šādi:

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

## Galīgās metodes

Ja metode tiek atzīmēta kā galīga, to nevar pārrakstīt. Tas nodrošina, ka apakšklases metode nevar mainīt tās paredzēto darbību. Lai to panāktu, metode jādeklarē ar Java `final` modifikatoru. Piemēram, aplūkosim klasi ar nosaukumu „Emperor”, kurā ir galīgā metode „myTitle”. Cita klase „King”, kas paplašina „Emperor”, mēģina pārrakstīt metodi „myTitle”. Galvenajā metodē mēs izmantojam „Prince” instanci, lai piekļūtu metodei. Kods izskatās šādi:

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

Ja tagad piemērosiet šo kodu, saņemsiet kļūdas ziņojumu:

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

## Galīgie mainīgie

Java `final` tiek izmantots arī, lai izveidotu mainīgos ar **vērtībām, kuras pēc tam nevar mainīt**. Tas ir īpaši svarīgi, ja noteikti mainīgie kodā ir jāpatur nemainīgi. Turpmākajā piemērā mēs izveidosim mainīgo x, kuram ir vērtība 5. Pēc tam mēs mēģināsim ievietot šo mainīgo un piešķirt tam jaunu vērtību. Kods izskatās šādi:

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

Kad izmantojam Java komandu `System.out.println`, lai parādītu rezultātu, saņemam šādu kļūdas ziņojumu:

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

### Izveidojiet tukšas galīgās mainīgās

Java valodā mainīgie vienmēr ir jāinicializē. Tomēr, ja deklarējat tukšu galīgo mainīgo, to varat inicializēt ar klases konstruktoru. Šādi izskatās kods:

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

Ja izpildīsiet šo kodu, kā rezultātu saņemsiet šādu teikumu:

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


This is a markdown version of: [https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/java-galigais/](https://www.ionos.com/lv-lv/digitalguide/timekla-vietnes/timekla-izstrade/java-galigais/) for AI/LLM consumption.