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.
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();
}
}javaRezultat, ki ga boste prejeli, naj bi bil podoben temu:
Main.java:6: error: cannot inherit from final FinalClass
class AdditionalClass extends FinalClass
^
1 errorjavaKonč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:
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Če zdaj uporabite ta kod, boste prejeli sporočilo o napaki:
Main.java:9: error myTitle() in King cannot override myTitle() in Emperor public final void myTitle() {
^
overridden method is finaljavaKonč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:
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);
}
}javaKo uporabimo ukaz Java System.out.println za prikaz rezultata, prejmemo naslednje sporočilo o napaki:
Main.java:6: error: cannot assign a value to final variable x
newValue.x = 10;
^
1 errorjavaUstvari 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:
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Če izvedete ta kod, boste kot izhod prejeli naslednji stavek:
Here is your message.java