  |
I campi statici equivalgono alle variabili globali |
class Stack {
static int count =0;
int top=0;
int [] stack;
Stack() {
++count;
stack = new int[10];
}
}
  |
c'è un solo count, condiviso tra tutti gli oggetti |
Vediamo di capire il meccanismo dei campi statici con questo esempio: in questo caso abbiamo il classico stack. Supponiamo che per qualche motivo ci interessa sapere quanti stack sono stati creati. Occorre una variabile che li conti, ma questa variabile non può essere un campo normale perché ne esiste una copia diversa per ogni istanza. Si potrebbe pensare di metterla da qualche altra parte, e non della classe, ma siccome concettualmente appartiene alla classe, la soluzione migliore è quella di usare un campo statico. Il campo count, essendo static, diventa unico per tutte le istanze della classe. Al campo si accede allo stesso modo con cui si accede agli altri campi, ma la differenza è che esiste un unico campo condiviso tra tutte le istanze. In questo modo funziona il conteggio: ogni volta che viene creato una istanza, questa incrementa l'unica occorrenza condivisa del campo count.
  |
basta il nome della classe per accedere ad un campo statico |
System.out.println("hello");
  |
out è campo statico di System |
I campi statici hanno anche una ulteriore proprietà: possono essere utilizzati senza istanza. Infatti non vengono memorizzati nel corpo di una istanza, ma separatamente in uno spazio di memoria comune per tutti i campi statici della classe. Per accedere a un campo statico basta il nome della classe. Se ricordate come si fa a scrivere nel terminale, si utilizza System.out. Come si vede si sta utilizzando out, che è un campo statico, e per utilizzarlo basta il nome della classe a cui appartiene (System). È comunque possibile utilizzare una istanza per accedervi, ma viene comunque modificato l'unico campo statico condiviso.
|