1. Lokale variabelen

Laten we het wat serieuzer hebben over variabelen. Maar deze keer gaan we niet in op hun interne structuur. In plaats daarvan richten we ons op hoe variabelen omgaan met de code waar ze zich bevinden.

Alle variabelen die binnen methoden worden gedeclareerd, worden lokale variabelen genoemd . Een lokale variabele bestaat alleen in het codeblok waarin deze is gedeclareerd. Of, om preciezer te zijn, het bestaat vanaf het moment dat het wordt gedeclareerd tot het einde van het codeblok waarin het wordt gedeclareerd.

Laten we voor de eenvoud een voorbeeld bekijken:

Code Variabele zichtbaarheid
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

Laten we het nog een keer hebben over toegang tot lokale variabelen. Hier is een codeblok bestaande uit accolades: dit kan een methodebody zijn, de body van een lus of gewoon een codeblok voor een voorwaardelijke instructie. Een variabele die in een codeblok is gedeclareerd, bestaat tot het einde van dat codeblok.

Als een variabele in de body van de lus wordt gedeclareerd, bestaat deze alleen in de body van de lus. Het wordt gemaakt en vernietigd bij elke iteratie van de lus.

U kunt niet twee lokale variabelen met dezelfde naam in één methode declareren - het programma zal niet compileren. Maar u kunt dit doen als de codeblokken waarin de variabelen worden gedeclareerd, elkaar niet overlappen.

Voorbeeld:

Code Variabele zichtbaarheid
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

We konden een tweede lokale variabele declareren, b alleen genoemd omdat de eerste b variabele niet zichtbaar is in het codeblok waarin de tweede bvariabele is gedeclareerd.


2. Parameters

Zoals we al eerder zeiden, kan elke methode variabelen hebben die we parameters noemen. Hoe zit het met hun zichtbaarheid en levensduur?

Het is allemaal eenvoudig. Parameters worden gemaakt wanneer de uitvoering in de methode stapt (dwz wanneer de code van de methode wordt uitgevoerd). Ze worden geëlimineerd wanneer de methode eindigt. Ze zijn zichtbaar in het hele lichaam van de methode.

Voorbeeld:

Code Variabele zichtbaarheid
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

Zoals we eerder zeiden, argsis het slechts een variabele waarvan het type een reeks strings is. En zoals alle parameters is het overal in de body van de methode beschikbaar. Dat gezegd hebbende, negeren we het meestal in onze voorbeelden.



3. Variabelen in een klasse

U herinnert zich uit de lessen in niveau 1 dat een klas methoden en variabelen kan hebben. Methoden worden soms instantiemethoden genoemd, en variabelen — instantievariabelen of velden. Dit zijn eigenlijk synoniemen in Java.

Wat zijn de variabelen (of velden) van een klasse?

Het zijn variabelen die niet in een methode worden gedeclareerd, maar in een klasse.

Ze zijn toegankelijk via elke (niet-statische) methode van een klasse. Ruwweg zijn instantievariabelen variabelen die worden gedeeld door alle methoden van een klasse.

Voorbeeld:

Code Variabele zichtbaarheid
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

In dit voorbeeld hebben we twee methoden — add()en remove(). De add()methode verhoogt de instantievariabelen sumen en de methode verlaagt de variabelen  en . Beide methoden werken op gedeelde instantievariabelen.countremove()sumcount

Lokale variabelen bestaan ​​terwijl een methode wordt uitgevoerd. De instantievariabelen van een klasse bestaan ​​binnen een object van een klasse zolang dat object bestaat. Op het volgende niveau leer je details over objecten van een klasse.


4. Statische variabelen

Net als methoden kunnen de variabelen in een klasse statisch of niet-statisch zijn. Statische methoden hebben alleen toegang tot statische variabelen.

In niveau 11 analyseren we de structuur van statische variabelen en methoden en begrijpt u de redenen voor deze beperkingen.

Om een ​​statische variabele (klassevariabele) te maken, moet u het statictrefwoord in de declaratie schrijven.

Statische variabelen zijn niet gebonden aan een object of instantie van de klasse waarin ze zijn gedeclareerd. In plaats daarvan behoren ze tot de klasse zelf. Dat is waarom ze bestaan, zelfs als er geen enkel object van de klasse is gemaakt . Je kunt ernaar verwijzen vanuit andere klassen met behulp van een constructie zoals:

ClassName.variableName

Voorbeeld:

Code Variabele zichtbaarheid
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 het bovenstaande voorbeeld hebben we een aparte Storageklasse gemaakt, de variabelen erin verplaatst count en sum ze statisch verklaard . Openbare statische variabelen zijn toegankelijk via elke methode in een programma (en niet alleen via een methode).