Un membro (variabile o metodo) static appartiene alla classe, non a ciascun singolo oggetto. Al contrario, un membro non static appartiene all'oggetto, quindi è distinto per ciascuna istanza della classe.
Prova questo:
codice:
public class Prova {
private static int sCont;
private int iCont;
public Prova() {
sCont++;
iCont++;
}
public String toString() {
return "sCont=" + sCont + " iCont=" + iCont;
}
public static void main(String[] args) {
Prova p1 = new Prova();
Prova p2 = new Prova();
Prova p3 = new Prova();
System.out.println(p1);
System.out.println(p2);
System.out.println(p3);
}
}
Vedrai che sCont viene stampato da tutti gli oggetti come 3. Questo perché sCont appartiene alla classe, c'è una sola variabile per così dire "globale". Mentre iCont è "di istanza", ciascun oggetto ha il SUO campo iCont distinto da quello degli altri oggetti.