Gyakorlati alapok I.
Ami a változót (és a többieket) változatlanná teszi: a final
A final elsődleges jelentése: végső, lásd final countdown (végső visszaszámlálás):
Programozás-technikai funkciója pontosan az, amire neve is utal: a dolog a final módosítószó használatával megváltoztathatlanná (továbbiakban: konstanssá) válik.
Tipikusan ilyenek lehetnek a változóértékek (variables), amelyek fő feladata mindenféle adat átmeneti vagy állandó tárolása, folyamatos "cipelése". Továbblépve: vannak olyan változóértékek, amelyeket egyenesen tilos megváltoztatnunk, hiszen éppen a fő matematikai referenciát jelentik. Ilyenek a természeti állandók, talán a legismertebb közülük a PI (3.14), amelyet felhasználása esetén final módosítással kell levédenünk, nehogy bármi is megváltoztassa:
import java.math.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
final double PI = 3.1415926535;
Scanner in = new Scanner(System.in);
System.out.println("Kérem, hogy adja meg a sugárhosszt
(r)!");
String sugar = in.nextLine();
double r = Double.parseDouble(sugar);
double kerulet = 2 * r * PI;
double terulet = Math.pow(r, 2) * PI;
System.out.println(r + " egységnyi sugarú kör
kerülete: " + kerulet);
System.out.println(r + " egységnyi sugarú kör
területe: " + terulet);
}
}
Végeredmény:
Kérem, hogy adja meg a sugárhosszt (r)!
5.8
A 5.8 egységnyi sugarú kör kerülete: 36.4424747806
A 5.8 egységnyi sugarú kör területe: 105.68317686374
A kódban jól látható, hogy bár a PI konstans értékével jól tudunk együtt dolgozni, sőt: mérnöki számítások alapját képezi, megváltoztatni mégsem vagyunk képesek, azaz a PI konstans változót semmilyen módon nem tudjuk más adattal felülírni. Minden ilyen irányú kísérlet hibaüzenetet és futási hibát okoz.
A final tehát archiválja, megőrzi a benne tárolt bármilyen értéket. Másképpen fogalmazva: a final a benne tárolt értéket csak egyszer veszi fel. Egyúttal jelzem: fontos névadási konvenció, hogy a konstans értékek változóit nagy betűkkel illessük, például PI - pi helyett.
Ebben a fejezetben kell megemlítenünk -bár az alábbi fogalmakkal még sokáig nem fogunk foglalkozni-, hogy a final nemcsak változók, hanem metódusok és osztályok esetében is használható:
-
a szülőosztály final metódusa nem túlterhelhető (override) a származtatott utódosztályban,
-
a final class Valami{} azt jelenti, hogy nem terjeszthető ki (extends), belőle utódosztályok nem származtathatók,
-
interfészeket nem lehet final módosítóval illetni, mert alapértelmezésben absztraktak.