- 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