Java/Variabili locali: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
mNessun oggetto della modifica
Riga 1:
{{Titolo errato|Java/Variabili}}
{{Java/Prima parte}}
 
Una ''variabile locale'' è una piccola area di memoria inche cuipermette èal possibileprogramma conservaredi in modo temporaneoricordare i dati utilizzatiusati dadurante unl'esecuzione, [[Java/Metodi|metodo]].e Questiquindi datidi devonoriutilizzarli averesenza tuttidoverli unocalcolare stesso [[Java/Tipi di dati|tipo]]ogni comunevolta.
 
== DichiarazioneCaratteristiche ==
Esistono tre tipi di variabili:
Consiste nella indicazione del tipo e del nome della variabile, separati da uno spazio e seguiti da un punto e virgola.
*variabili locali
*variabili di istanza (includono le [[Java/Array|celle degli array]])
*variabili statiche
 
Questi tipi sono esaminate singolarmente nelle sezioni successive. In questa sezione sono spiegate le caratteristiche che hanno in comune.
 
A tempo di compilazione (ovvero nel testo sorgente del programma), una variabile è caratterizzata da:
*nome: un [[Java/Lessico#Identificatori|identificatore]]
*[[Java/Tipi di dato|tipo]]
*significato: il significato che il valore contenuto nella variabile ha per il programma.
 
A tempo di esecuzione, a questi si aggiunge anche il ''valore'' presente nella variabile. In ogni momento, una variabile o è vuota, o contiene un valore (mai più di uno). Inserire un nuovo valore significa '''cancellare''' il valore che c'era prima.
 
; Dichiarazione
Consiste nella indicazione del tipo e del nome della variabile, separati da uno spazio e seguiti da un punto e virgola.<br />
Ad esempio, l'istruzione <tt>int indice;</tt> definisce una variabile che può contenere solo valori del tipo <tt>int</tt>, e il cui nome è <tt>indice</tt>.
 
La dichiarazione può anche includere un'operazione di assegnazione, nel qual caso si parla di ''inizializzazione'' della variabile: ad esempio,
== Scope ==
int indice = 10;
Si chiama ''scope'' della variabile quella parte del testo del programma in cui quella variabile si considera definita.
equivale a scrivere
int indice;
indice = 10;
 
Lo scope comincia con l'istruzione di dichiarazione della variabile, e termina con la fine del blocco di codice più piccolo che contiene la dichiarazione.
 
Le variabili locali sono vuote, a meno che non ci sia una inizializzazione. Invece, le variabili di istanza o statiche sono inizializzate con un valore di default:
== Inizializzazione ==
*<tt>0</tt> per i tipi numerici interi
Molti programmatori provenienti da altri linguaggi erroneamente ritengono che il seguente codice funzioni:
*<tt>false</tt> per <tt></tt>
*<tt>null</tt> per i tipi riferimento.
Ne consegue che le variabili di istanza e quelle statiche non sono mai vuote.
 
; Lettura
Per leggere il valore contenuto in una variabile se ne scrive il nome. Ad esempio:
int indice = 10;
System.out.println(indice);
stampa a video <tt>10</tt>.
 
Non si può leggere una variabile vuota (vedi sopra), pertanto questo codice non funziona:
<source lang="java">
int i;
System.out.println(i);
</source>
Questo comportamento è diverso da quello che si trova in altri linguaggi, come il C, in cui la variabile viene automaticamente inizializzata ad un valore predefinito o casuale.
 
; Scrittura
In realtà, questo codice non compila, poiché in Java vale la seguente regola: ''prima di poter leggere da una variabile, bisogna scriverci dentro un valore tramite assegnazione''. (Questa regola [[Java/Oggetti#Inizializzazione dei campi|non vale]] per i campi delle classi e per gli ''slot'' degli array.)
Per scrivere un valore nella variabile si usa l'operatore di assegnazione <tt>=</tt>.
 
'''Attenzione:''' questo non ha lo stesso significato dell'operatore matematico di uguaglianza. Ad esempio, se si eseguono le istruzioni
Questo comportamento è diverso da quello che si trova in altri linguaggi, come il C, in cui la variabile viene automaticamente inizializzata ad un valore predefinito o casuale.
a = b;
b = c + 1;
a = c;
non si avrà nessun errore, perché quelle scritte sono '''assegnazioni''' e non '''equazioni'''.
 
'''Attenzione:''' non confondere l'operatore di ''assegnazione'' <tt>=</tt> con l'operatore di ''confronto'' <tt>==</tt>
 
==; Scope ==
Si chiama ''scope'' (o ''ambito di validità'') la regione del [[:w:codice sorgente|codice sorgente]] del programma in cui la variabile si considera definita. Al di fuori dello ''scope'', la variabile semplicemente non esiste.
 
Lo scope dipende dal tipo di variabile (vedere di seguito). Saper riconoscere lo scope di una variabile è importante, perché scope diversi possono ospitare variabili con lo stesso nome.
 
===; Variabili ''"final'' ==="
Si può vincolare una variabile a contenere un valore prefissato, che non cambierà mai durante l'esecuzione del programma. (In pratica si tratta di una costante.) Per farlo si deve usare il modificatore <tt>final</tt> nella dichiarazione della variabile. Il compilatore controllerà il testo del programma, analizzerà tutti i flussi di esecuzione possibili, e verificherà che in nessuno di questi flussi di esecuzione avvenga che la variabile subisce due istruzioni di assegnazione.
 
== Variabili locali ==
Una ''variabile locale'' è una variabile definita all'interno di un metodo. Solo quel metodo è autorizzato ad accedere alla variabile.
 
Lo scope della variabile è corrisponde al [[Java/Istruzioni|blocco]] più esterno in cui la variabile è definita.
 
== Variabili di istanza ==
Sono i campi degli oggetti. La vita di una variabile di istanza coincide con quella dell'oggetto a cui appartiene: quindi comincia con la creazione dell'oggetto, e finisce quando l'oggetto viene deallocato.
 
== Variabili statiche ==
Sono le variabili definite in una classe con la parola-chiave <tt>static</tt>. Esse appartengono ad una classe e non ai suoi oggetti. La variabile nasce quando la virtual machine carica la classe, e resta in vita finché il ClassLoader della classe non viene deallocato.
 
Anche le interfacce possono avere variabili statiche.
== Lettura e assegnazione ==
{{...}}
 
=== Variabili ''final'' ===
{{...}}
 
== Espressioni ==