JAVA KINTAMIEJI

Java konstantos

Kai kintamojo reikšmė po pirmojo priskyrimo neturi keistis, Java kalboje naudojamas raktažodis final. Jis apsaugo kintamąjį nuo pakartotinio priskyrimo ir aiškiai parodo programuotojo ketinimą.

Ką daro final?

Raktažodis final rašomas prieš kintamojo tipą. Priskyrus reikšmę, tam pačiam kintamajam naujos reikšmės suteikti nebegalima:

final int skaicius = 15;
skaicius = 20; // Klaida: final kintamajam negalima priskirti naujos reikšmės

Antroji instrukcija sukeltų kompiliavimo klaidą. Programa nebus paleista, kol bandymas pakeisti skaicius reikšmę nebus pašalintas.

final nėra atskiras duomenų tipas.

Tipas vis dar yra int; final tik apriboja galimybę atlikti kitą priskyrimą.

Plačiau apie Java final raktažodį

Kada naudoti final?

final tinka reikšmėms, kurios programos vykdymo metu turi išlikti tokios pačios. Tai gali būti aiškios dalykinės taisyklės, nekintantys dydžiai arba reikšmės, kurių atsitiktinis pakeitimas sukeltų klaidą.

final int MINUTES_PER_HOUR = 60;
final int DAYS_PER_WEEK = 7;
final int BIRTH_YEAR = 1980;
  • MINUTES_PER_HOUR visada yra 60.
  • DAYS_PER_WEEK šiame modelyje visada yra 7.
  • BIRTH_YEAR konkrečiam asmeniui neturėtų būti netyčia pakeisti skaičiavimo metu.

Konstantų pavadinimai

Nekintančios konstantos pagal įprastą Java susitarimą rašomos didžiosiomis raidėmis, o keli žodžiai atskiriami apatiniu brūkšniu: MAX_LOGIN_ATTEMPTS arba SECONDS_PER_MINUTE.

Toks rašymas nėra kompiliatoriaus reikalavimas. Tai skaitomumo susitarimas, padedantis iš karto atpažinti, kad reikšmė kode neturėtų būti keičiama.

Reikšmę galima priskirti vėliau, bet tik kartą

final vietinį kintamąjį galima deklaruoti be pradinės reikšmės. Tačiau prieš naudojant jam būtina priskirti reikšmę, ir tai galima padaryti tik vieną kartą:

final int maksimalusGreitis;
maksimalusGreitis = 120; // Pirmas priskyrimas leidžiamas

// maksimalusGreitis = 130; // Antras priskyrimas sukeltų klaidą

Šis būdas naudingas, kai reikšmė paaiškėja tik atlikus skaičiavimą ar gavus metodo rezultatą, tačiau po to turi išlikti nepakitusi.

final nuoroda ir keičiamas objektas

Objektų atveju final apsaugo nuorodą nuo pakeitimo kitu objektu. Tai nebūtinai reiškia, kad pats tampa visiškai nekeičiamas:

final StringBuilder tekstas = new StringBuilder("Java");
tekstas.append("Quest"); // Objekto turinį keisti galima

// tekstas = new StringBuilder("Kitas"); // Nuorodos pakeisti negalima

Kintamasis tekstas visada nurodys tą patį StringBuilder objektą, tačiau to objekto turinį galima papildyti. Tikram objekto nekintamumui reikia ir atitinkamo pačios klasės dizaino.

Ką verta prisiminti?

  • final kintamajam reikšmė priskiriama tik vieną kartą.
  • Pakartotinis priskyrimas sukelia kompiliavimo klaidą.
  • Konstantų pavadinimai dažnai rašomi UPPER_SNAKE_CASE stiliumi.
  • final nuoroda ne visada padaro patį objektą nekeičiamą.
  • Naudok final, kai pakeitimas būtų nelogiškas arba pavojingas.