La parola chiave static anteposta ad un metodo
od un attributo di una classe lo fa unico nella classe ed esso non
è quindi un elemento distinto per ogni classe.
Definire campi static è un pò contro il paradigma
ad oggetti proprio per questo fatto. Gli oggetti sono stati inventati
per avere questa particolare dinamicità delle operazioni,
ma usando static un metodo diventa unico.
Metodi statici non possono richiamare metodid un oggetto. Quando
nel metodo static richiamiamo il metodo non static, non abbiamo
appresso un riferimento ad un oggetto. Dunque non possiamo chiamarlo.
Invece le istanze possono riferirsi sia a metodi che campi statici.
Facciamo un exemplo:
class StaticTest {
static int i=47;
}
//nel main,,,
StaticTest st1=new StaticTest();
...
..
StaticTest.i++;
st1.i++;
Le due istruzioni finali rappresentano la stessa istruzione perché
la variabile i nella classe è una variabile di classe e quindi
unica per tutti gli oggetti. L'abbiamo dunque incrementata due volte,
il suo valore finale sarà 49!!
Inizializzazione dei campi static e non-static
I campi non statici vengono inizializzati quando viene creata un'istanza.
I campi statici devono essere inizializzati prima di una qualsiasi
istanziazione. Essi sono inizializzati a load time quando viene
creata la classe. Una classe viene caricata la prima volta che viene
nominata nel codice. Naturalmente questi campi vengono inizializzati
solo una volta, la prima volta che la classe è chiamata.
I campi non statici primitivi che non inizializziamo noi sono inizializzati
con i valori di default (NULL).