JAVA KINTAMIEJI

Java vietiniai kintamieji

Vietinis kintamasis deklaruojamas metodo, konstruktoriaus arba kodo bloko viduje. Jis skirtas laikinai reikšmei, kurios reikia tik atliekant konkretų veiksmą.

Kas yra vietinis kintamasis?

Šiame pavyzdyje kaina yra vietinis metodo rodytiKaina() kintamasis:

public class Main {
    static void rodytiKaina() {
        double kaina = 2.49;
        System.out.println("Duonos kaina: " + kaina + " Eur");
    }

    public static void main(String[] args) {
        rodytiKaina();
    }
}
Konsolės rezultatas

Duonos kaina: 2.49 Eur

  1. Metodas rodytiKaina() pradeda vykdyti savo kodą.
  2. Jo viduje sukuriamas vietinis double kintamasis kaina.
  3. Metodas panaudoja reikšmę ir išveda ją į konsolę.
  4. Metodui baigus darbą, šis vietinis kintamasis daugiau nebereikalingas.

Svarbiausios savybės

Java vietinio kintamojo savybės
SavybėKą ji reiškia?
VietaDeklaruojamas metodo, konstruktoriaus arba bloko viduje
Galiojimo sritisPasiekiamas tik tame bloke, kuriame buvo deklaruotas
Gyvavimo laikasReikalingas tik vykdant atitinkamą metodą arba bloką
Pradinė reikšmėJava jos nesuteikia – programuotojas turi inicializuoti kintamąjį

Kintamasis matomas tik savo metode

Kintamasis kaina sukurtas metode rodytiKaina(), todėl metodas main() jo tiesiogiai nemato.

public class Main {
    static void rodytiKaina() {
        double kaina = 2.49;
        System.out.println(kaina);
    }

    public static void main(String[] args) {
        rodytiKaina();
        System.out.println(kaina); // Kompiliavimo klaida
    }
}
Kompiliatoriaus klaida

error: cannot find symbol
symbol: variable kaina

Skirtingi metodai yra tarsi atskiri kambariai: viename kambaryje padėtas daiktas savaime nėra pasiekiamas kitame.

Vietinis kintamasis kodo bloke

Figūriniai skliaustai { ... } sukuria bloką. Jo viduje deklaruotas kintamasis galioja tik iki uždarančio skliausto.

public class Main {
    public static void main(String[] args) {
        boolean lyja = true;

        if (lyja) {
            String daiktas = "skėtis";
            System.out.println("Pasiimk: " + daiktas);
        }

        // System.out.println(daiktas); // Čia daiktas nebepasiekiamas
    }
}
Konsolės rezultatas

Pasiimk: skėtis

  1. Kadangi lyja yra true, programa įeina į if bloką.
  2. Bloke sukuriamas kintamasis daiktas ir išvedama jo reikšmė.
  3. Pasibaigus blokui, vardas daiktas tame metode nebepasiekiamas.

Vietinis ciklo kintamasis

for ciklo antraštėje deklaruotas skaitiklis taip pat yra vietinis kintamasis.

public class Main {
    public static void main(String[] args) {
        for (int diena = 1; diena <= 3; diena++) {
            System.out.println("Diena " + diena);
        }

        // System.out.println(diena); // Už ciklo kintamojo nėra
    }
}
Konsolės rezultatas

Diena 1
Diena 2
Diena 3

Kintamasis diena reikalingas tik ciklui. Kai ciklas baigiasi, už jo ribų šio pavadinimo naudoti nebegalima.

Prieš naudojimą būtina priskirti reikšmę

Java vietiniams kintamiesiems automatiškai nesuteikia numatytosios reikšmės:

public class Main {
    public static void main(String[] args) {
        int obuoliuSkaicius;

        System.out.println(obuoliuSkaicius);
        // Klaida: kintamajam dar nepriskirta reikšmė
    }
}
Kompiliatoriaus klaida

error: variable obuoliuSkaicius might not have been initialized

Kintamąjį galima deklaruoti vienoje eilutėje, bet prieš skaitant jo reikšmę ją būtina priskirti:

public class Main {
    public static void main(String[] args) {
        int obuoliuSkaicius;
        obuoliuSkaicius = 5;

        System.out.println("Obuolių: " + obuoliuSkaicius);
    }
}
Konsolės rezultatas

Obuolių: 5

Tas pats pavadinimas skirtinguose metoduose

Du metodai gali turėti vienodai pavadintus vietinius kintamuosius, nes jų galiojimo sritys nesusikerta.

public class Main {
    static void ruostiPusrycius() {
        String gerimas = "arbata";
        System.out.println("Pusryčiams: " + gerimas);
    }

    static void ruostiVakariene() {
        String gerimas = "vanduo";
        System.out.println("Vakarienei: " + gerimas);
    }

    public static void main(String[] args) {
        ruostiPusrycius();
        ruostiVakariene();
    }
}
Konsolės rezultatas

Pusryčiams: arbata
Vakarienei: vanduo

Kiekvienas gerimas priklauso tik savo metodui. Vieno metodo reikšmės pakeitimas nepakeistų kito metodo kintamojo.

Ką verta prisiminti?

  • Vietinį kintamąjį deklaruok kuo arčiau vietos, kurioje jis naudojamas.
  • Prieš pirmą naudojimą visada priskirk jam reikšmę.
  • Nesitikėk pasiekti kintamojo už jo metodo ar bloko ribų.
  • Rinkis aiškų pavadinimą, nusakantį laikinos reikšmės paskirtį.
  • Vietinis kintamasis negali būti pažymėtas static.