# Java/Variabili locali

| Java Linguaggio Java categoria · sviluppo · Come posso contribuire? → Vai su Wikiversity | Java: Guida alla programmazioneJava/Introduzione - Specifica di linguaggio - Libreria standardJava/Comunicazione seriale Tipi di datoJava/Tipi di dato • EspressioniJava/Operatori • VariabiliJava/Variabili locali • IstruzioniJava/Istruzioni • Strutture di controlloJava/Strutture di controllo • PackageJava/Package Classi e oggettiJava/Classi e oggetti • OggettiJava/Oggetti • MetodiJava/Metodi • Metodi (cont.)Java/Metodi/2 • ArrayJava/Array Modificatori di accessoJava/Modificatori di accesso • EreditarietàJava/Ereditarietà Gestione delle eccezioniJava/Gestione delle eccezioni • GenericsJava/Generics Thread e parallelismoJava/Multithreading • Interblocco ricontrollatoJava/Interblocco ricontrollato Alcune differenze con il CJava/Concetti fondamentali • LessicoJava/Lessico • GrammaticaJava/Grammatica |
Una variabile è una piccola area di memoria che permette al programma di ricordare i dati usati durante l'esecuzione, e quindi di riutilizzarli senza doverli calcolare ogni volta.

## Caratteristiche

Esistono tre tipi di variabili:
* variabili locali
* variabili di istanza (includono le 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 identificatore
* 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. Ad esempio, l'istruzione int indice; definisce una variabile che può contenere solo valori del tipo int, e il cui nome è indice.
La dichiarazione può anche includere un'operazione di assegnazione, nel qual caso si parla di inizializzazione della variabile: ad esempio,
equivale a scrivere
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:
* 0 per i tipi numerici interi
* false per boolean
* null 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:
stampa a video 10.
Non si può leggere una variabile vuota (vedi sopra), pertanto questo codice non funziona:
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

Per scrivere un valore nella variabile si usa l'operatore di assegnazione =.
Attenzione: questo non ha lo stesso significato dell'operatore matematico di uguaglianza. Ad esempio, se si eseguono le istruzioni
non si avrà nessun errore, perché quelle scritte sono assegnazioni e non equazioni.
Attenzione: non confondere l'operatore di assegnazione = con l'operatore di confronto ==

### Scope

Si chiama scope (o ambito di validità) la regione del 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.

### Costanti

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 final 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.
Per convenzione, e per rendere il codice più chiaro, le costanti sono tipicamente definite come variabili static final. Se le convenzioni di nomenclatura sono rispettate, ciò permette di distinguere le costanti a colpo d'occhio. Ovviamente, ciò non è sempre applicabile, ad esempio quando il valore da tenere memorizzato dipende da fattori che dipendono dall'esecuzione del programma e non sono noti a priori.

### Convenzioni di nomenclatura

I nomi delle variabili dovrebbero:
* essere abbastanza esplicativi da rendere chiaro il significato che assumono nel programma
* essere in CamelCase, con l'iniziale minuscola; con l'eccezione delle costanti (variabili static final), il cui nome dovrebbe essere composto di parole completamente in maiuscolo e separate dagli underscore.

## 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 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 static. 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.