Java/Variabili locali

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.

Il titolo di questa voce non è corretto per via delle caratteristiche del software MediaWiki. Il titolo corretto è Java/Variabili.

Java

Linguaggio Java
Linguaggio Java

categoria · sviluppo · modifica
Come posso contribuire?

→ Vai su Wikiversity

Java:  Guida alla programmazioneJava/Introduzione - Specifica di linguaggio - Libreria standardJava/Comunicazione seriale

Tipi di datoJava/Tipi di datoEspressioniJava/OperatoriVariabiliJava/Variabili localiIstruzioniJava/IstruzioniStrutture di controlloJava/Strutture di controlloPackageJava/Package
Classi e oggettiJava/Classi e oggettiOggettiJava/OggettiMetodiJava/MetodiMetodi (cont.)Java/Metodi/2ArrayJava/Array
Modificatori di accessoJava/Modificatori di accessoEreditarietàJava/Ereditarietà
Gestione delle eccezioniJava/Gestione delle eccezioniGenericsJava/Generics
Thread e parallelismoJava/MultithreadingInterblocco ricontrollatoJava/Interblocco ricontrollato
Alcune differenze con il CJava/Concetti fondamentaliLessicoJava/LessicoGrammaticaJava/Grammatica

Caratteristiche

modifica

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

modifica

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,

int indice = 10;

equivale a scrivere

int indice;
indice = 10;


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

modifica

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 10.

Non si può leggere una variabile vuota (vedi sopra), pertanto questo codice non funziona:

 int i;
 System.out.println(i);

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

modifica

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

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 = con l'operatore di confronto ==

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

modifica

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

modifica

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

modifica

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

modifica

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

modifica

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.