Variabili locali

"Saluti, mio ​​amato studente! È tempo di prendere un po' più sul serio le variabili. Ma questa volta non discuteremo della loro struttura interna. Ci concentreremo invece su come le variabili interagiscono con il codice in cui si trovano.

"Tutte le variabili dichiarate all'interno dei metodi sono chiamate variabili locali . Una variabile locale esiste solo nel blocco di codice in cui viene dichiarata. O, per essere più precisi, esiste dal momento in cui viene dichiarata fino alla fine del blocco del codice in cui è dichiarato."

"Chiaramente, ho bisogno di un esempio."

"Nessun problema. Ecco qua:

Codice Disponibilità variabile
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

"Esaminiamo ancora una volta le regole per l'accesso alle variabili locali. Ecco un blocco di codice. Cosa ne segna l'inizio e la fine?"

"Parentesi graffe?"

"Esatto. Questo potrebbe essere il corpo di un metodo, il corpo di un ciclo o solo un blocco di codice per un'istruzione condizionale. Una variabile dichiarata in un blocco di codice esiste fino alla fine di quel blocco di codice. Dimmi, dove sarà una variabile esiste se è dichiarata nel corpo di un ciclo?"

"Esisterà solo nel corpo del ciclo."

"Esatto. Inoltre, verrà creato e distrutto a ogni iterazione del ciclo."

"Ciò significa che non puoi dichiarare due variabili locali con lo stesso nome in un metodo: il programma non verrà compilato. Ma puoi farlo se i blocchi di codice in cui sono dichiarate le variabili non si sovrappongono. "

"C'è un motivo per cui sei il mio preferito, Amigo. Prendi un altro esempio per solidificarlo nel tuo cervello.

Codice Visibilità variabile
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

"Siamo stati in grado di dichiarare una seconda variabile locale denominata bsolo perché la prima bvariabile non è visibile nel blocco di codice in cui bè dichiarata la seconda variabile.

Parametri

"Come abbiamo detto prima, ogni metodo può avere variabili che chiamiamo parametri. E la loro visibilità e durata?"

"Hmm... sono perplesso..."

"Tutto è abbastanza semplice qui. I parametri vengono creati quando l'esecuzione entra nel metodo (cioè quando il codice del metodo inizia l'esecuzione). Vengono eliminati quando il metodo finisce."

"In altre parole, sono visibili in tutto il corpo del metodo e solo lì?"

"Sì. Esempio:

Codice Visibilità variabile
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

"Come abbiamo detto prima, argsè solo una variabile il cui tipo è un array di stringhe. E come tutti i parametri, è disponibile ovunque all'interno del corpo del metodo. Detto questo, di solito lo ignoriamo nei nostri esempi.

Variabili in una classe

"Ricorda le lezioni del Livello 1, dove abbiamo detto che una classe può avere metodi e variabili. I metodi sono talvolta chiamati metodi di istanza e variabili - variabili di istanza o campi.

"Quali sono le variabili (o campi) di una classe ?

Sono variabili dichiarate non in un metodo, ma in una classe."

"E a cosa servono?"

"Per cominciare, è possibile accedervi da qualsiasi metodo (non statico) di una classe. In parole povere, le variabili di istanza sono variabili condivise da tutti i metodi di una classe.

Esempio:

Codice Visibilità variabile
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 questo esempio, abbiamo due metodi: add()e remove(). Il add()metodo incrementa le variabili di istanza sume counte il remove()metodo diminuisce le variabili sume count. Entrambi i metodi funzionano su variabili di istanza condivise."

"Capisco tutto! Le variabili locali esistono mentre un metodo è in esecuzione. Le variabili di istanza di una classe esistono all'interno di un oggetto di una classe finché esiste quell'oggetto."

"Ben fatto, Amigo. Abbiamo gettato le basi e imparerai i dettagli sugli oggetti di una classe nel livello successivo.

Variabili statiche

"Come i metodi, le variabili in una classe possono essere statiche o non statiche. I metodi statici possono accedere solo a variabili statiche.

"Non ho ancora una chiara comprensione delle variabili statiche."

"Oh, lo so, ma non preoccuparti. Per ora, prendi confidenza con loro. Prendi confidenza con loro. Nel Livello 11, analizzeremo la struttura delle variabili e dei metodi statici e capirai le ragioni di questi restrizioni.

"Per creare una variabile statica (variabile di classe), devi scrivere la staticparola chiave nella sua dichiarazione.

"Le variabili statiche non sono legate a un oggetto o a un'istanza della classe in cui sono dichiarate. Appartengono invece alla classe stessa. Ecco perché esistono anche se non è stato creato un singolo oggetto della classe. Puoi fare riferimento a li da altre classi usando un costrutto come:

ClassName.variableName

Esempio:

Codice Visibilità variabile
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

"Nell'esempio precedente, abbiamo creato una Storageclasse separata, abbiamo spostato le variabili counte sumal suo interno e le abbiamo dichiarate static . È possibile accedere alle variabili statiche pubbliche da qualsiasi metodo in un programma (e non solo da un metodo)."

"Non capisco bene, ma questo mi sembra comodo."

"Così è. E a volte è necessario. Senza variabili e metodi statici rimarremmo bloccati."

"Spero di riuscire lentamente a capirlo."

"Sì, certo che lo farai."