Kuidas kasutada Java final klasside, meetodite ja muutujate puhul
Märksõna final kasutatakse Java-s muutumatute elementide loomiseks. Seda modifikaatorit saab rakendada klassidele, meetoditele ja muutujatele. Eelkõige kasutatakse seda vea ja tahtliku väärkasutuse vältimiseks koodis.
Mis on Java final?
Enamik programmeerimiskeeli võimaldab olemasolevat koodi soovi korral muuta ja laiendada. Java keeles on see samuti võimalik, kuid on juhtumeid, kus on oluline, et element oleks määratud muutumatuks. Java keeles saab seda teha modifikaatori final abil. Seda modifikaatorit kasutatakse klassi, meetodi või muutuja juurdepääsu piiramiseks. Kui muutuja on deklareeritud lõplikuks, ei saa selle väärtust muuta. Lõplikku klassi ei saa laiendada ja lõplikku meetodit ei saa ümber kirjutada. See aitab kaitsta koodi selle osa väärkasutamise eest.
Lõplikud tunnid
Kui kasutate klassi jaoks Java final, ei saa seda enam laiendada. See lähenemisviis on väga levinud ja paljudel juhtudel kasutatakse seda alamklassi tuletamise vältimiseks. See kehtib põhiliste andmetüüpide kohta, nagu java.lang.Math või java.lang.String, mis on alati deklareeritud lõplikena. Isegi kui soovite muudel põhjustel vältida põhiklassi alamklasside tuletamist, on Java final kasutamine parim viis. Järgmises näites loome lõpliku klassi ja teise klassi, mis peaks teoreetiliselt seda laiendama. Pärast seda tuleb põhiklass koos põhimeetodiga.
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();
}
}javaSaadud väljund peaks olema umbes selline:
Main.java:6: error: cannot inherit from final FinalClass
class AdditionalClass extends FinalClass
^
1 errorjavaLõplikud meetodid
Kui märgistate meetodi lõplikuks, ei saa seda ümber kirjutada. See tagab, et alamklassi meetod ei saa muuta oma kavandatud käitumist. Selle saavutamiseks deklareerige meetod Java final modifikaatoriga. Võtame näiteks klassi nimega „Emperor”, mis sisaldab lõplikku meetodit nimega „myTitle”. Teine klass „King”, mis laiendab „Emperor”, üritab meetodit „myTitle” ümber kirjutada. Peameetodis kasutame meetodile juurdepääsuks „Prince” instantsi. Kood on järgmine:
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();
}
}javaKui te nüüd seda koodi rakendate, saate veateate:
Main.java:9: error myTitle() in King cannot override myTitle() in Emperor public final void myTitle() {
^
overridden method is finaljavaLõplikud muutujad
Java final kasutatakse ka muutujate loomiseks, mille väärtusi ei saa hiljem muuta. See on eriti oluline, kui teatud muutujad peavad koodis jääma konstantseks. Järgmises näites loome muutuja x, mille väärtus on 5. Seejärel proovime seda muutujat lisada ja määrata sellele uue väärtuse. Kood näeb välja järgmine:
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);
}
}javaKui kasutame Java-käsku System.out.println tulemuse kuvamiseks, saame järgmise veateate:
Main.java:6: error: cannot assign a value to final variable x
newValue.x = 10;
^
1 errorjavaLoo tühjad lõplikud muutujad
Java-s tuleb muutujad alati initsialiseerida. Kui aga deklareerite tühi lõpliku muutuja, saate selle initsialiseerida klassi konstruktoriga. Kood näeb välja järgmine:
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);
}
}javaKui te selle koodi käivitate, saate väljundina järgmise lause:
Here is your message.java