Zmienne lokalne

„Witaj, mój ukochany uczniu! Czas trochę poważniej podejść do zmiennych. Ale tym razem nie będziemy omawiać ich wewnętrznej struktury. Zamiast tego skupimy się na tym, jak zmienne wchodzą w interakcję 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 mówiąc dokładniej, istnieje od momentu zadeklarowania do końca bloku kodu, w którym jest zadeklarowany”.

„Oczywiście, potrzebuję przykładu”.

"Nie ma problemu. Proszę bardzo:

Kod Zmienna dostępność
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

„Omówimy jeszcze raz zasady dostępu do zmiennych lokalnych. Oto blok kodu. Co oznacza jego początek i koniec?”

"Nawiasy klamrowe?"

„Zgadza się. 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. Powiedz mi, gdzie zmienna istnieje, jeśli jest zadeklarowana w treści pętli?”

„Będzie istnieć tylko w treści pętli”.

„Zgadza się. Co więcej, będzie tworzony i niszczony przy każdej iteracji pętli”.

„Oznacza to, że nie można zadeklarować dwóch zmiennych lokalnych o tej samej nazwie w jednej metodzie — program się nie skompiluje. Ale można to zrobić, jeśli bloki kodu, w których deklarowane są zmienne, nie nakładają się na siebie” .

„Jest powód, dla którego jesteś moim ulubieńcem, Amigo. Weź jeszcze jeden przykład, aby utrwalić to w swoim mózgu.

Kod Zmienna widoczność
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ą o nazwie btylko dlatego, że pierwsza zmienna nie jest widoczna w bloku kodu, w którym zadeklarowana jest bdruga zmienna.b

Parametry

„Jak powiedzieliśmy wcześniej, każda metoda może mieć zmienne, które nazywamy parametrami. A co z ich widocznością i czasem życia?”

"Hmm... jestem w szoku..."

„Tutaj wszystko jest dość proste. Parametry są tworzone, gdy wykonanie przechodzi do metody (tj. kiedy kod metody zaczyna się wykonywać). Są one eliminowane, gdy metoda się kończy”.

„Innymi słowy, są one widoczne w całym ciele metody i tylko tam?”

„Tak. Przykład:

Kod Zmienna widoczność
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, której typem jest tablica łańcuchów. I podobnie jak wszystkie parametry, jest dostępna wszędzie w ciele metody. To powiedziawszy, zwykle ignorujemy ją w naszych przykładach.

Zmienne w klasie

„Pamiętaj lekcje na poziomie 1, gdzie powiedzieliśmy, że klasa może mieć metody i zmienne. Metody są czasami nazywane metodami instancji, a zmienne — zmiennymi instancji lub polami.

„Jakie są zmienne (lub pola) klasy ?

Są to zmienne zadeklarowane nie w metodzie, ale w klasie”.

— A po co oni tam są?

„Na początek można uzyskać do nich dostęp z dowolnej (niestatycznej) metody klasy. Z grubsza mówiąc, zmienne instancji to zmienne, które są wspólne dla wszystkich metod klasy.

Przykład:

Kod Zmienna widoczność
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(). add()Metoda zwiększa zmienne instancji sumi count, a remove()metoda zmniejsza zmienne sumi count. Obie metody działają na wspólnych zmiennych instancji”.

„Rozumiem to wszystko! Zmienne lokalne istnieją podczas wykonywania metody. Zmienne instancji klasy istnieją w obiekcie klasy tak długo, jak ten obiekt istnieje” .

„Dobra robota, Amigo. Położyliśmy trochę pracy przygotowawczej i poznasz szczegóły dotyczące obiektów klasy na następnym poziomie.

Zmienne statyczne

„Podobnie jak metody, zmienne w klasie mogą być statyczne lub niestatyczne. Metody statyczne mają dostęp tylko do zmiennych statycznych.

„Nie mam jeszcze jasnego zrozumienia zmiennych statycznych”.

„Och, wiem, ale nie martw się. Na razie po prostu oswój się z nimi. Zapoznaj się z nimi. Na poziomie 11 przeanalizujemy strukturę zmiennych statycznych i metod, a zrozumiesz przyczyny tych ograniczenia.

„Aby utworzyć zmienną statyczną (zmienną klasową), musisz wpisać słowo statickluczowe w jej deklaracji.

„Zmienne statyczne nie są związane z obiektem lub instancją klasy, w której zostały zadeklarowane. Zamiast tego należą do samej klasy. Dlatego istnieją, nawet jeśli nie został utworzony ani jeden obiekt klasy . Możesz odwołać się do je z innych klas przy użyciu konstrukcji takiej jak:

ClassName.variableName

Przykład:

Kod Zmienna widoczność
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ą Storageklasę, przenieśliśmy do niej zmienne counti i zadeklarowaliśmy je jako statyczne . Dostęp do publicznych zmiennych statycznych można uzyskać z dowolnej metody w programie (a nie tylko z metody).”sum

„Nie do końca rozumiem, ale wydaje mi się to wygodne”.

„Tak jest. A czasami jest to konieczne. Bez zmiennych statycznych i metod byśmy utknęli”.

„Mam nadzieję, że powoli będę w stanie to rozgryźć”.

– Tak, oczywiście, że będziesz.