- Witaj, mój ulubiony uczniu. Teraz opowiem Ci o widoczności zmiennych.
– Hę? Czy zmienne mogą być niewidoczne?
– Nie. „Widoczność” zmiennej lub jej zasięg (scope) oznacza miejsca w kodzie, z których można odwoływać się do tej zmiennej. Niektórych zmiennych możesz używać w dowolnym miejscu w programie, innych tylko w obrębie ich klasy, a jeszcze innych tylko w jednej metodzie.
– Na przykład nie można użyć zmiennej, zanim nie zostanie ona zadeklarowana.
– To ma sens.
– Oto kilka przykładów:
┏
┃public class Zmienne
┃┏
┃┃{
┃┃ private static String TEKST = "Koniec.";
┃┃ ┗━━━━━━━━━━━━━━┛
┃┃ public static void main (String[] args)
┃┃ ┏ ┗━━━━━━━┛
┃┃ ┃ {
┃┃ ┃ System.out.println("Cześć");
┃┃ ┃ String s = "Cześć!";
┃┃ ┃ ┏┗━━━━┛
┃┃ ┃ ┃ System.out.println(s);
┃┃ ┃ ┃ if (args != NULL)
┃┃ ┃ ┃ {
┃┃ ┃ ┃ String s2 = s;
┃┃ ┃ ┃ ┗━━━━┛
┃┃ ┃ ┃ ┏
┃┃ ┃ ┃ ┃ System.out.println(s2);
┃┃ ┃ ┃ ┗
┃┃ ┃ ┃ }
┃┃ ┃ ┃ Zmienne zmienne = new Zmienne();
┃┃ ┃ ┃ System.out.println(zmienne.zmiennaInstancji);
┃┃ ┃ ┃ System.out.println(TEKST);
┃┃ ┃ ┗
┃┃ ┃ }
┃┃ ┗
┃┃ public String zmiennaInstancji;
┃┃ ┗━━━━━━━━━━━━━━━┛
┃┃ public Zmienne()
┃┃ {
┃┃ zmiennaInstancji = "Test zmiennej instancji.";
┃┃ }
┃┃}
┃┗
┗
1. Zmienna zadeklarowana w metodzie istnieje (jest widoczna) od miejsca jej deklaracji do końca tej metody.
2. Zmienna zadeklarowana w bloku kodu istnieje do końca tego bloku.
3. Parametry metody istnieją wszędzie w obrębie metody.
4. Zmienne w obiekcie istnieją przez cały okres życia obiektu, który je zawiera. Zakres ich widoczności określają specjalne modyfikatory dostępu: public i private.
5. Zmienne statyczne (klasy) istnieją przez cały czas działania programu. Zakres ich widoczności również jest określany przez modyfikatory dostępu.
– Uwielbiam obrazki. Pomagają wszystko zrozumieć.
– Zdolny chłopak. Zawsze wiedziałem, że jesteś inteligentny.
– Opowiem Ci również o „modyfikatorach dostępu”. Nie bój się. Nie ma w nich nic skomplikowanego. Możesz zobaczyć tu słowa public i private.
– Nie boję się. Po prostu mam tik w oku.
– Wierzę Ci. Możesz zarządzać tym, w jaki sposób metody i zmienne jednej klasy są dostępne (lub widoczne) dla innych klas. Do każdej metody i zmiennej możesz przypisać tylko jeden modyfikator dostępu.
1. Modyfikator dostępu public.
Zmiennej lub metody oznaczonej modyfikatorem public możesz użyć w dowolnym miejscu programu. To najwyższy poziom dostępu – nie ma tutaj żadnych ograniczeń.
2. Modyfikator dostępu private.
Zmiennej lub metody oznaczonej modyfikatorem private możesz użyć tylko z klasy, w której została zadeklarowana. Dla wszystkich pozostałych klas tak oznaczone metody i zmienne są niewidoczne – jakby nie istniały. To najwyższy poziom zamknięcia – dostęp jest możliwy tylko w obrębie własnej klasy.
3. Brak modyfikatora.
Jeżeli zmienna lub metoda nie jest oznaczona żadnym modyfikatorem, uznaje się ją za oznaczoną „domyślnym” modyfikatorem dostępu. Takie zmienne i metody są widoczne dla wszystkich klas w pakiecie, w którym zostały zadeklarowane. I tylko dla nich. Ten poziom dostępu można nazwać „prywatnym pakietu”, ponieważ dostęp do zmiennych i metod jest możliwy dla całego pakietu, który zawiera ich klasę.
Oto tabela podsumowująca to, o czym mówiłem:
Modyfikatory | Dostęp z… | ||
---|---|---|---|
Tej klasy | Tego pakietu | Dowolnej klasy | |
private | Tak | Nie | Nie |
Brak modyfikatora (prywatny pakietu) | Tak | Tak | Nie |
public | Tak | Tak | Tak |