Ti riporto integralmente il capitolo di un tutorial tratto da mokabyte.com (pensavo più che affidabile!) proprio dedicato alla differenza tra var globale e locale.
Ma quindi è sbagliato e fuorviante?
---
VARIABILI GLOBALI
Una variabile globale è una variabile definita al di fuori di un metodo, in modo tale che risulti visibile a tutti i metodi del programma. La sintassi generale di una variabile globale è:
static tipo nomeVariabile;
Si noti di nuovo l'uso della parola "static", il cui ruolo verrà spiegato in dettaglio più avanti: per il resto si tratta di una normale dichiarazione di variabile. Anche in questo caso è possibile dichiarare variabili inizializzate:
static tipo nomeVariabile = valoreIniziale;
in questo caso la variabile viene inizializzata con il valore iniziale quando il programma viene eseguito. Pertanto è possibile riproporre una variazione sul programma precedente che mostri l'uso di una variabile globale:
public class Esempio2 {
static int a = 10;
static void metodo1() {
System.out.println(a);
}
static void metodo2() {
a = a++;
System.out.println(a);
}
}
Cosa succede quando all'interno di un metodo si dichiara una variabile locale con lo stesso nome di una variabile globale? Accade che, all'interno del metodo, la variabile locale ha precedenza di accesso rispetto a quella globale, che comunque mantiene inalterato il suo valore. Si osservi un frammento di codice come il seguente:
public class Esempio3 {
static int a = 10;
static void metodo1() {
System.out.println(a);
}
static void metodo2() {
int a = 11; // questa a e' DIVERSA dalla a globale
System.out.println(a);
}
}
In questo caso abbiamo una variabile globale di nome a, che viene utilizzata all'interno del metodo1. Nel metodo2, viene dichiarata una nuova variabile a, visibile solo all'interno del metodo, che tuttavia non sovrascrive la sua omonima globale. Dall'interno del metodo2 e' ancora possibile accedere alla variabile globale a, ricorrendo alla parola riservata "this". Vediamo un esempio:
public class Esempio4 {
static int a = 10;
static void metodo2() {
int a = 11; // questa variabile a e' DIVERSA dalla a globale
System.out.println(a); // stampa la variabile locale
System.out.println(this.a); // stampa la variabile globale
}
}
Inutile sottolineare che simili situazioni tendono a creare confusione ed ambiguità: il programmatore deve sempre cercare di adottare la soluzione più semplice, ed evitare il più possibile di riutilizzare il nome di una variabile globale in ambito locale.
Struttura generale di un programma con metodi e variabili globali
E' giunto il momento di riassumere le nozioni introdotte fino ad ora, e di integrarle con quanto appreso in precedenza. I metodi e le variabili globali vanno definiti all'interno della definizione di classe, sullo stesso livello della sezione main, che, come già detto, è un metodo a sua volta. Possiamo allora estendere la struttura base di un programma Java seguendo questo schema:
public class NomeProgramma {
static tipo variabile1;
static tipo variabile2;
...
static tipo metodo1() {
istruzione1;
...
istruzioneN;
return returnVal;
}
static tipo metodo2() {
istruzione1;
...
istruzioneN;
return returnVal;
}
...
public static void main(String argv[]) {
}
}
Un dettaglio importante per chi ha una certa esperienza del linguaggio Pascal: contrariamente a quest'ultimo, Java non permette di dichiarare metodi all'interno di altri metodi, ossia metodi nidificati.
---
In effetti sto studiando da pochissimo Java...ti da errore xke' non hai capito che significa static![]()
Mi potresti definire con chiarezza il significato dei modificatori 'static' e 'public'?
Grazie![]()