CodeGym /Kursy /Składnia Java /Widoczność zmiennych

Widoczność zmiennych

Składnia Java
Poziom 2 , Lekcja 4
Dostępny

- 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
Komentarze (7)
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION
Romek Szl Poziom 2, Poland, Poland
27 grudnia 2022
Co to jest ten pakiet? W ostatniej tabelce?
Anonymous #11274698 Poziom 8, Gorzow Wielkopolski, Poland
12 lutego 2023
Jeśli nie wybierzesz żadnego modyfikatora to zostanie on uznany za "domyślny" czyli widzialny dla danej klasy i pakietu w którym się znajduje
polish89 Poziom 18, Poland, Poland
20 sierpnia 2022
Yeah, you should tell about protected access modifier as well.
Karol Grzeszczak Poziom 31, Poland, Poland
8 maja 2022
próbowaliście przepisać ten kod i odpalić bo mi nie działa undefinedZmienne.java:13: error: cannot find symbol if (args != NULL) symbol: variable NULL location: class Zmienne
Loginus Lagonow Poziom 9, Poland, Poland
8 listopada 2022
próbowałeś słowa "null" ?
Teh Kec Poziom 5, United Kingdom, United Kingdom
20 października 2023
Brawo..., właśnie miało nie działać. Brakowało jednej linijki, a mianowicie określenie, że NULL ma wartość null Trzeba zdefiniować to używając private, więc do dzieła. Był to podchwytliwy przykład na tej lekcji.
Marcin Poziom 8
27 października 2020
Hmm...what about protected access modifier?