Lokale Variablen

„Grüße, mein geliebter Student! Es ist an der Zeit, sich etwas ernsthafter mit Variablen zu befassen. 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 wird. Oder genauer gesagt, sie existiert vom Moment ihrer Deklaration bis zum Ende des Blocks.“ des Codes, in dem es deklariert ist.

„Natürlich brauche ich ein Beispiel.“

„Kein Problem. Bitte schön:

Code Variable Verfügbarkeit
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 die Regeln für den Zugriff auf lokale Variablen noch einmal durchgehen. Hier ist ein Codeblock. Was markiert seinen Anfang und sein Ende?“

"Geschweifte Klammern?"

"Richtig. 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. Sagen Sie mir, wo sie sein wird Existiert eine Variable, wenn sie im Rumpf einer Schleife deklariert wird?“

„Es wird nur im Hauptteil der Schleife existieren.“

„Das ist richtig. Darüber hinaus wird es bei jeder Iteration der Schleife erstellt und zerstört.“

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

„Es gibt einen Grund, warum du mein Favorit bist, Amigo. Nimm noch ein Beispiel, um dies in deinem Gehirn zu festigen.

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 bnur deshalb deklarieren, weil die erste bVariable in dem Codeblock, in dem die zweite bVariable deklariert ist, nicht sichtbar ist.

Parameter

„Wie wir bereits sagten, kann jede Methode Variablen haben, die wir Parameter nennen. Wie sieht es mit ihrer Sichtbarkeit und Lebensdauer aus?“

„Hmm... ich bin ratlos...“

„Hier ist alles ganz einfach. Parameter werden erstellt, wenn die Ausführung in die Methode eintritt (d. h. wenn der Code der Methode mit der Ausführung beginnt). Sie werden gelöscht, wenn die Methode endet.“

„Mit anderen Worten, sie sind im gesamten Körper der Methode sichtbar und nur dort?“

„Ja. 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 wir bereits sagten, argshandelt es sich lediglich um eine Variable, deren Typ ein Array aus Zeichenfolgen ist. Und wie alle Parameter ist sie überall im Körper der Methode verfügbar. Allerdings ignorieren wir sie in unseren Beispielen normalerweise.“

Variablen in einer Klasse

„Erinnern Sie sich an die Lektionen in Level 1, wo wir gesagt haben, dass eine Klasse Methoden und Variablen haben kann. Methoden werden manchmal Instanzmethoden genannt und Variablen – Instanzvariablen oder Felder.“

„Was sind die Variablen (oder Felder) einer Klasse ?

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

„Und wofür sind sie da?“

„Erst einmal kann von jeder (nicht statischen) Methode einer Klasse auf sie 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 sumund- countInstanzvariablen und die remove()Methode verringert die sumund- countVariablen. Beide Methoden funktionieren mit gemeinsam genutzten Instanzvariablen.“

„Ich verstehe das alles! Lokale Variablen existieren, während eine Methode ausgeführt wird. Die Instanzvariablen einer Klasse existieren innerhalb eines Objekts einer Klasse, solange dieses Objekt existiert.“

„Gut gemacht, Amigo. Wir haben einige Grundlagen geschaffen und im nächsten Level erfährst du Details über Objekte einer Klasse.

Statische Variablen

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

„Ich habe noch kein klares Verständnis von statischen Variablen.“

„Oh, ich weiß, aber machen Sie sich keine Sorgen. Machen Sie sich vorerst einfach mit ihnen vertraut. Machen Sie sich mit ihnen vertraut. In Level 11 analysieren wir die Struktur statischer Variablen und Methoden und Sie werden die Gründe dafür verstehen 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 darauf verweisen sie aus anderen Klassen mit einem Konstrukt wie:

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 Klasse erstellt , die Variablen und in diese Storageverschoben 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).“countsum

„Ich verstehe es nicht ganz, aber das scheint mir praktisch.“

„So ist es. Und manchmal ist es notwendig. Ohne statische Variablen und Methoden würden wir stecken bleiben.“

„Hoffentlich schaffe ich es langsam, es herauszufinden.“

„Ja, natürlich wirst du das.“