Lokala variabler

"Hälsningar, min älskade student! Det är dags att bli lite mer seriös om variabler. Men den här gången kommer vi inte att diskutera deras interna struktur. Istället kommer vi att fokusera på hur variabler interagerar med koden där de finns.

"Alla variabler som deklareras inuti metoder kallas lokala variabler . En lokal variabel finns bara i kodblocket där den deklareras. Eller, för att vara mer exakt, den existerar från det ögonblick den deklareras till slutet av blocket kod i vilken den deklareras."

"Det är klart att jag behöver ett exempel."

"Inga problem. Varsågod:

Koda Variabel tillgänglighet
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

"Låt oss gå igenom reglerna för åtkomst till lokala variabler en gång till. Här är ett kodblock. Vad markerar dess början och slut?"

"Kulliga hängslen?"

"Korrekt. Detta kan vara en metodkropp, kroppen av en loop, eller bara ett kodblock för en villkorlig sats. En variabel som deklareras i ett kodblock existerar till slutet av det kodblocket. Säg mig, var kommer existerar en variabel om den deklareras i en loops brödtext?"

"Det kommer bara att existera i slingans kropp."

"Det stämmer. Dessutom kommer det att skapas och förstöras vid varje iteration av loopen."

"Det betyder att du inte kan deklarera två lokala variabler med samma namn i en metod — programmet kommer inte att kompilera. Men du kan göra detta om kodblocken där variablerna deklareras inte överlappar varandra . "

"Det finns en anledning till att du är min favorit, Amigo. Ta ytterligare ett exempel för att stelna detta i din hjärna.

Koda Variabel sikt
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

"Vi kunde deklarera en andra lokal variabel bendast namngiven eftersom den första bvariabeln inte är synlig i kodblocket där den andra bvariabeln deklareras.

Parametrar

"Som vi sa tidigare kan varje metod ha variabler som vi kallar parametrar. Hur är det med deras synlighet och livslängd?"

"Hmm... jag är förbannad..."

"Allt är ganska enkelt här. Parametrar skapas när exekveringen kliver in i metoden (dvs. när metodens kod börjar exekveras). De elimineras när metoden slutar."

"Med andra ord, de är synliga i hela metoden och bara där?"

"Ja. Exempel:

Koda Variabel sikt
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

"Som vi sa tidigare, argsär den bara en variabel vars typ är en rad strängar. Och som alla parametrar är den tillgänglig överallt i metoden. Som sagt, vi ignorerar den vanligtvis i våra exempel.

Variabler i en klass

"Kom ihåg lektionerna på nivå 1, där vi sa att en klass kan ha metoder och variabler. Metoder kallas ibland instansmetoder och variabler - instansvariabler eller fält.

"Vilka är variablerna (eller fälten) i en klass ?

De är variabler som inte deklareras i en metod, utan i en klass."

"Och vad är de där för?"

"Till att börja med kan de nås från vilken (icke-statisk) metod som helst i en klass. Grovt sett är instansvariabler variabler som delas av alla metoder i en klass.

Exempel:

Koda Variabel sikt
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

"I det här exemplet har vi två metoder - add()och remove(). Metoden add()ökar instansvariablerna sumoch , och metoden minskar variablerna och . Båda metoderna fungerar på delade instansvariabler."countremove()sumcount

"Jag förstår allt! Lokala variabler existerar medan en metod körs. Instansvariablerna för en klass existerar inom ett objekt i en klass så länge det objektet existerar."

"Bra gjort, Amigo. Vi har lagt grunden, och du kommer att lära dig detaljer om objekt i en klass på nästa nivå.

Statiska variabler

"Precis som metoder kan variablerna i en klass vara statiska eller icke-statiska. Statiska metoder kan bara komma åt statiska variabler.

"Jag har inte en klar förståelse för statiska variabler ännu."

"Åh, jag vet, men oroa dig inte. För nu är det bara att bli bekväm med dem. Bli bekant med dem. På nivå 11 kommer vi att analysera strukturen för statiska variabler och metoder och du kommer att förstå orsakerna till dessa restriktioner.

"För att göra en statisk variabel (klassvariabel) måste du skriva staticnyckelordet i dess deklaration.

"Statiska variabler är inte bundna till ett objekt eller instans av klassen där de deklareras. Istället tillhör de själva klassen. Det är därför de existerar även om inte ett enda objekt i klassen har skapats . Du kan hänvisa till dem från andra klasser med en konstruktion som:

ClassName.variableName

Exempel:

Koda Variabel sikt
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

"I exemplet ovan skapade vi en separat Storageklass, flyttade in variablerna countoch sumtill den och förklarade dem statiska . Offentliga statiska variabler kan nås från vilken metod som helst i ett program (och inte bara från en metod)."

"Jag förstår inte helt, men det här verkar bekvämt för mig."

"Så är det. Och ibland är det nödvändigt. Utan statiska variabler och metoder skulle vi ha fastnat."

"Förhoppningsvis kommer jag sakta att kunna lista ut det."

"Ja, självklart kommer du att göra det."