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.
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();
}
}javaRezultāts, ko saņemsiet, izskatīsies aptuveni šādi:
Main.java:6: error: cannot inherit from final FinalClass
class AdditionalClass extends FinalClass
^
1 errorjavaGalī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:
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();
}
}javaJa tagad piemērosiet šo kodu, saņemsiet kļūdas ziņojumu:
Main.java:9: error myTitle() in King cannot override myTitle() in Emperor public final void myTitle() {
^
overridden method is finaljavaGalī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:
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);
}
}javaKad izmantojam Java komandu System.out.println, lai parādītu rezultātu, saņemam šādu kļūdas ziņojumu:
Main.java:6: error: cannot assign a value to final variable x
newValue.x = 10;
^
1 errorjavaIzveidojiet 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:
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);
}
}javaJa izpildīsiet šo kodu, kā rezultātu saņemsiet šādu teikumu:
Here is your message.java