Variabile locale

„Salut, iubitul meu student! Este timpul să fim un pic mai serioși în privința variabilelor. Dar de data aceasta nu vom discuta despre structura lor internă. În schimb, ne vom concentra asupra modului în care variabilele interacționează cu codul în care sunt localizate.

„Toate variabilele care sunt declarate în interiorul metodelor se numesc variabile locale . O variabilă locală există doar în blocul de cod în care este declarată. Sau, mai precis, există din momentul în care este declarată și până la sfârșitul blocului. de cod în care este declarat.”

— În mod clar, am nevoie de un exemplu.

„Nici o problemă. Iată:

Cod Disponibilitate variabilă
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

"Să trecem încă o dată peste regulile de accesare a variabilelor locale. Iată un bloc de cod. Ce marchează începutul și sfârșitul acestuia?"

"Acolade?"

„Corect. Acesta poate fi un corp de metodă, corpul unei bucle sau doar un bloc de cod pentru o instrucțiune condiționată. O variabilă declarată într-un bloc de cod există până la sfârșitul acelui bloc de cod. Spune-mi, unde va fi o variabilă există dacă este declarată în corpul unei bucle?"

„Va exista doar în corpul buclei”.

"Așa este. În plus, va fi creat și distrus la fiecare iterație a buclei."

„Asta înseamnă că nu puteți declara două variabile locale cu același nume într-o singură metodă — programul nu se va compila. Dar puteți face acest lucru dacă blocurile de cod în care sunt declarate variabilele nu se suprapun.

„Există un motiv pentru care ești preferatul meu, Amigo. Mai ia un exemplu pentru a consolida asta în creierul tău.

Cod Vizibilitate variabila
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

„Am putut declara o a doua variabilă locală numită bdoar pentru că prima bvariabilă nu este vizibilă în blocul de cod în care beste declarată a doua variabilă.

Parametrii

„Așa cum am spus mai înainte, fiecare metodă poate avea variabile pe care le numim parametri. Cum rămâne cu vizibilitatea și durata lor de viață?”

"Hmm... sunt nedumerit..."

"Totul este destul de simplu aici. Parametrii sunt creați atunci când execuția intră în metodă (adică când codul metodei începe să se execute). Aceștia sunt eliminați când metoda se termină."

„Cu alte cuvinte, sunt vizibile în întreg corpul metodei și doar acolo?”

„Da. Exemplu:

Cod Vizibilitate variabila
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

„Așa cum am spus mai devreme, argseste doar o variabilă al cărei tip este o matrice de șiruri de caractere. Și, ca toți parametrii, este disponibil peste tot în corpul metodei. Acestea fiind spuse, de obicei o ignorăm în exemplele noastre.

Variabile dintr-o clasă

„Amintiți-vă de lecțiile de la Nivelul 1, unde am spus că o clasă poate avea metode și variabile. Metodele sunt uneori numite metode de instanță, iar variabile - variabile de instanță sau câmpuri.

„Care sunt variabilele (sau câmpurile) unei clase ?

Sunt variabile care sunt declarate nu într-o metodă, ci într-o clasă.”

— Și pentru ce sunt acolo?

„Pentru început, ele pot fi accesate din orice metodă (nestatică) a unei clase. În linii mari, variabilele de instanță sunt variabile care sunt partajate de toate metodele unei clase.

Exemplu:

Cod Vizibilitate variabila
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

„În acest exemplu, avem două metode — add()și remove(). add()Metoda incrementează variabilele de instanță sumși count, iar remove()metoda scade variabilele sumși count. Ambele metode funcționează pe variabilele de instanță partajate.”

"Înțeleg totul! Variabilele locale există în timp ce o metodă se execută. Variabilele de instanță ale unei clase există în cadrul unui obiect al unei clase atâta timp cât acel obiect există."

„Bravo, Amigo. Am pus bazele și vei afla detalii despre obiectele unei clase la nivelul următor.

Variabile statice

„Ca și metodele, variabilele dintr-o clasă pot fi statice sau nestatice. Metodele statice pot accesa doar variabile statice.

„Nu am încă o înțelegere clară a variabilelor statice.”

„O, știu, dar nu vă faceți griji. Deocamdată, familiarizați-vă cu ele. Familiarizați-vă cu ele. La Nivelul 11, vom analiza structura variabilelor și metodelor statice și veți înțelege motivele pentru acestea. restricții.

„Pentru a face o variabilă statică (variabilă de clasă), trebuie să scrieți staticcuvântul cheie în declarația sa.

„Variabilele statice nu sunt legate de un obiect sau instanță a clasei în care sunt declarate. În schimb, aparțin clasei în sine. De aceea există chiar dacă nu a fost creat niciun obiect al clasei . Puteți face referire la le din alte clase folosind un construct ca:

ClassName.variableName

Exemplu:

Cod Vizibilitate variabila
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

"In the above example, we created a separate Storage class, moved the count and sum variables into it, and declared them static. Public static variables can be accessed from any method in a program (and not only from a method)."

"I don't fully understand, but this seems convenient to me."

"So it is. And sometimes it is necessary. Without static variables and methods we would be stuck."

"Hopefully, I'll slowly be able to figure it out."

"Yes, of course you will."