Kukin aliohjelma muodostaa oman kokonaisuutensa. Edellä olleissa esimerkeissä aliohjelmat eivät tiedä ulkomaailmasta mitään muuta, kuin sen, mitä niille tuodaan parametreinä kutsun yhteydessä.
Vastaavasti ulkomaailma ei tiedä mitään aliohjelman omista muuttujista. Näitä aliohjelman lokaaleja muuttujia on esim. seuraavassa:
private static int pituus_ja_muuta(StringBuffer s) { int pit = s.length(); s.delete(0,pit).append("toka"); // pääohjelman jono muuttuu nyt return pit; }
s - aliohjelman parametrimuuttuja (tässä tapauksessa viite merkkijonoon). pit - aliohjelman lokaali apumuuttuja pituuden säilyttämiseksi
Yleensäkin Java- kielessä lausesulut { ja } muodostavat lohkon, jonka ulkopuolelle mikään lohkon sisällä määritelty muuttuja tai tyyppimääritys ei näy. Näkyvyysalueesta käytetään englanninkielisessä kirjallisuudessa nimitystä scope. Lokaaleilla muuttujilla voi olla vastaava nimi, joka on jo aiemmin esiintynyt jossakin toisessa yhteydessä. Lohkon sisällä käytetään sitä määrittelyä, joka esiintyy lohkossa:
/** :-( * Testataan Javan muuttujien lokaalisuutta * @author Vesa Lappalainen * @version 1.0, 13.01.2003 */ public class Lokaali { static private char ch='A'; static private void ali() { double ch = 4.5; System.out.println("Reaaliluku " + ch); } public static void main(String[] args) { System.out.println("Kirjain " + ch); { int ch = 5; System.out.println("Kokonaisluku " + ch); ali(); } System.out.println("Kirjain " + ch); } }
Ohjelma tulostaa:
Kirjain A Kokonaisluku 5 Reaaliluku 4.5 Kirjain A
Saman tunnuksen käyttäminen eri tarkoituksissa on kuitenkin kaikkea muuta kuin hyvää ohjelmointia.