1. Lokale Variablen

Lassen Sie uns etwas ernsthafter über Variablen sprechen. Aber dieses Mal werden wir nicht auf ihre interne Struktur eingehen. Stattdessen konzentrieren wir uns darauf, wie Variablen mit dem Code interagieren, in dem sie sich befinden.

Alle Variablen, die innerhalb von Methoden deklariert werden, werden lokale Variablen genannt . Eine lokale Variable existiert nur in dem Codeblock, in dem sie deklariert ist. Genauer gesagt existiert es vom Moment seiner Deklaration bis zum Ende des Codeblocks, in dem es deklariert wird.

Betrachten wir der Einfachheit halber ein Beispiel:

Code Variable Sichtbarkeit
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

Lassen Sie uns noch einmal über den Zugriff auf lokale Variablen sprechen. Hier ist ein Codeblock, der aus geschweiften Klammern besteht: Dies könnte ein Methodenkörper, der Körper einer Schleife oder einfach nur ein Codeblock für eine bedingte Anweisung sein. Eine in einem Codeblock deklarierte Variable existiert bis zum Ende dieses Codeblocks.

Wenn eine Variable im Schleifenkörper deklariert wird, existiert sie nur im Schleifenkörper. Es wird bei jeder Iteration der Schleife erstellt und zerstört.

Sie können nicht zwei lokale Variablen mit demselben Namen in einer Methode deklarieren – das Programm wird nicht kompiliert. Sie können dies jedoch tun, wenn sich die Codeblöcke, in denen die Variablen deklariert sind, nicht überschneiden.

Beispiel:

Code Variable Sichtbarkeit
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

Wir konnten eine zweite lokale Variable mit Namen b nur deshalb deklarieren, weil die erste b Variable in dem Codeblock, in dem die zweite bVariable deklariert ist, nicht sichtbar ist.


2. Parameter

Wie bereits erwähnt, kann jede Methode Variablen haben, die wir Parameter nennen. Wie sieht es mit ihrer Sichtbarkeit und Lebensdauer aus?

Es ist alles unkompliziert. Parameter werden erstellt, wenn die Ausführung in die Methode eintritt (d. h. wenn die Ausführung des Codes der Methode beginnt). Sie werden eliminiert, wenn die Methode endet. Sie sind im gesamten Körper der Methode sichtbar.

Beispiel:

Code Variable Sichtbarkeit
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

Wie bereits erwähnt, argshandelt es sich lediglich um eine Variable, deren Typ ein Array aus Zeichenfolgen ist. Und wie alle Parameter ist er überall im Körper der Methode verfügbar. Allerdings ignorieren wir es in unseren Beispielen normalerweise.



3. Variablen in einer Klasse

Sie werden sich aus den Lektionen in Level 1 erinnern, dass eine Klasse Methoden und Variablen haben kann. Methoden werden manchmal als Instanzmethoden und Variablen als Instanzvariablen oder Felder bezeichnet. Dies sind eigentlich Synonyme in Java.

Was sind die Variablen (oder Felder) einer Klasse?

Es handelt sich um Variablen, die nicht in einer Methode, sondern in einer Klasse deklariert werden.

Auf sie kann von jeder (nicht statischen) Methode einer Klasse aus zugegriffen werden. Grob gesagt sind Instanzvariablen Variablen, die von allen Methoden einer Klasse gemeinsam genutzt werden.

Beispiel:

Code Variable Sichtbarkeit
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 diesem Beispiel haben wir zwei Methoden – add()und remove(). Die add()Methode erhöht die Instanzvariablen und und sumverringert die  Instanzvariablen . Beide Methoden funktionieren mit gemeinsam genutzten Instanzvariablen.countremove()sumcount

Während der Ausführung einer Methode sind lokale Variablen vorhanden. Die Instanzvariablen einer Klasse existieren innerhalb eines Objekts einer Klasse, solange dieses Objekt existiert. Details zu Objekten einer Klasse erfahren Sie im nächsten Level.


4. Statische Variablen

Wie Methoden können auch die Variablen einer Klasse statisch oder nicht statisch sein. Statische Methoden können nur auf statische Variablen zugreifen.

In Level 11 analysieren wir die Struktur statischer Variablen und Methoden und Sie verstehen die Gründe für diese Einschränkungen.

Um eine statische Variable (Klassenvariable) zu erstellen, müssen Sie das staticSchlüsselwort in ihre Deklaration schreiben.

Statische Variablen sind nicht an ein Objekt oder eine Instanz der Klasse gebunden, in der sie deklariert sind. Stattdessen gehören sie zur Klasse selbst. Deshalb existieren sie auch dann, wenn kein einziges Objekt der Klasse erstellt wurde . Sie können von anderen Klassen aus auf sie verweisen, indem Sie ein Konstrukt wie das folgende verwenden:

ClassName.variableName

Beispiel:

Code Variable Sichtbarkeit
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

Im obigen Beispiel haben wir eine separate StorageKlasse erstellt, die Variablen count und sum in diese verschoben und sie als static deklariert . Auf öffentliche statische Variablen kann von jeder Methode in einem Programm aus zugegriffen werden (und nicht nur von einer Methode).