1. Zmienne lokalne

Porozmawiajmy trochę poważniej o zmiennych. Ale tym razem omówimy nie ich wewnętrzną strukturę, ale interakcję zmiennych z kodem, w którym się znajdują.

Wszystkie zmienne zadeklarowane wewnątrz metod nazywane są zmiennymi lokalnymi . Zmienna lokalna istnieje tylko w bloku kodu, w którym została zadeklarowana. A dokładniej, istnieje od momentu deklaracji do końca bloku kodu, w którym jest zadeklarowany.

Spójrzmy na przykład dla uproszczenia:

Kod Dostępność zmiennych
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     while (true)
     {
       int x = a + b;
       System.out.println(x);
     }
     System.out.println(b);
   }

}


a
a
a
a, b
a, b
a, b
a, b, x
a, b, x
a, b
a, b
a
a

Porozmawiajmy ponownie o dostępności zmiennych lokalnych. Oto blok kodu składający się z nawiasów klamrowych: może to być treść metody, treść pętli lub po prostu blok kodu instrukcji warunkowej. Zmienna zadeklarowana w bloku kodu istnieje do końca tego bloku kodu.

Jeśli zmienna jest zadeklarowana w ciele pętli, będzie istnieć tylko w ciele pętli. Bycie tworzonym i niszczonym na każdym etapie cyklu.

Nie możesz zadeklarować dwóch zmiennych lokalnych o tej samej nazwie w tej samej metodzie - program się nie skompiluje. Ale jest to możliwe, jeśli bloki kodu, w których deklarowane są zmienne, nie nakładają się na siebie.

Przykład:

Kod Dostępność zmiennych
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     System.out.println(b);
   }

   if (a < 20)
   {
     int b = 20;
     System.out.println(b);
   }
}


a
a
a
a, b
a, b
a
a
a
a
a, b
a, b
a

Mogliśmy zadeklarować drugą zmienną lokalną z nazwą b tylko dlatego, że pierwsza zmienna b nie jest widoczna w bloku kodu, w którym zadeklarowana jest druga zmienna b.


2. Zmienne-parametry

Jak powiedzieliśmy wcześniej, każda metoda może mieć zmienne parametryczne. A co z ich widocznością i żywotnością?

Tutaj wszystko jest dość proste. Zmienne parametrów są tworzone, gdy sterowanie jest przekazywane do kodu metody (kod metody rozpoczyna wykonywanie) i usuwane, gdy metoda się kończy. Są one widoczne w całym ciele metody.

Przykład:

Kod Dostępność zmiennych
public static void main(String[] args)
{
   int a = 5;
   if (a < 10)
   {
     int b = 10;
     while (true)
     {
       int x = a + b;
       System.out.println(x);
     }
     System.out.println(b);
   }

}

args
args, a
args, a
args, a
args, a, b
args, a, b
args, a, b
args, a, b, x
args, a, b, x
args, a, b
args, a, b
args, a
args, a

Jak powiedzieliśmy wcześniej, argsjest to po prostu zmienna typu tablica łańcuchów. I podobnie jak wszystkie zmienne parametryczne, jest ona dostępna wszędzie wewnątrz ciała metody. Chociaż w naszych przykładach zwykle to ignorujemy.



3. Zmienne klasowe

Jak pamiętasz z wykładów na poziomie 1, klasa może zawierać funkcje i zmienne. Funkcje są zwykle nazywane „metodami klasowymi”, a zmienne „zmiennymi klasowymi” lub „polami klas”. W rzeczywistości w Javie są to synonimy.

Co to są zmienne klasy (lub pola)?

Zmienne klasy to zmienne zadeklarowane nie w metodzie, ale w klasie.

Dostęp do nich można uzyskać z dowolnej metody klasy. Z grubsza mówiąc , zmienne klasowewspólnymi zmiennymi dla wszystkich metod klasy.

Przykład:

Kod Dostępność zmiennych
public class Solution
{
   public int count = 0;
   public int sum = 0;

   public void add(int data)
   {
     sum = sum + data;
     count++;
   }

   public void remove(int data)
   {
     sum = sum - data;
     count--;
   }
}


count
count, sum
count, sum
count, sum
count, sum, data
count, sum, data
count, sum, data
count, sum
count, sum
count, sum
count, sum, data
count, sum, data
count, sum, data
count, sum
count, sum

W tym przykładzie mamy dwie metody — add()i remove(). Metoda add()zwiększa zmienne klasy sumi count, a metoda remove()zmniejsza zmienne sum i count. Obie metody operują na wspólnych zmiennych klasy.

Zmienne lokalne istnieją podczas wykonywania metody. Zmienne klasy istnieją tak długo, jak długo istnieje obiekt klasy, do której należą . Więcej o obiektach klasowych dowiesz się na następnym poziomie.


4. Zmienne statyczne

Zmienne klasowe, podobnie jak metody klasowe, są statyczne i niestatyczne (zwykłe). Metody statyczne mają dostęp tylko do zmiennych statycznych.

Na poziomie 11 przyjrzymy się, jak działają zmienne statyczne i metody oraz zrozumiemy przyczyny tych ograniczeń.

Aby uczynić zmienną klasową statyczną, musisz wpisać słowo kluczowe przed jej deklaracją static.

Zmienne statyczne są powiązane nie z obiektem klasy, w którym zostały zadeklarowane, ale z samą klasą. W związku z tym istnieją nawet wtedy, gdy nie jest tworzony żaden obiekt klasy . Możesz uzyskać do nich dostęp z innych klas, używając konstrukcji formularza:

ClassName.variableName

Przykład:

Kod Dostępność zmiennych
public class Solution
{
   public void add(int data)
   {
     Storage.sum = Storage.sum + data;
     Storage.count++;
   }

   public void remove(int data)
   {
     Storage.sum = Storage.sum - data;
     Storage.count--;
   }
}

public class Storage
{
   public static int count = 0;
   public static int sum = 0;
}

Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum, data
Storage.count, Storage.sum



Storage.count, Storage.sum
Storage.count, Storage.sum
Storage.count, Storage.sum

W powyższym przykładzie stworzyliśmy oddzielną klasę Storage, przenieśliśmy do niej zmienne count i sum zadeklarowaliśmy je jako statyczne . Dostęp do publicznych zmiennych statycznych można uzyskać z dowolnej metody programu (a nie tylko z metody).