I membri "di classe" (static) appartengono alla classe, non a ciascuna istanza (oggetto) della classe. Una variabile di classe quindi è "unica", indipendentemente da quanti oggetti della classe andrai ad istanziare.
Nota tecnica: in realtà e per essere pignoli, nel concetto di unicità entra in gioco il classloader. Infatti è un classloader che carica la definizione di una classe. Se due classloader distinti caricano la stessa classe, si avranno due istanze di java.lang.Class distinte per quella classe e quindi per ciascuna ci saranno quei campi static distinti. È un concetto un po' avanzato ... magari dimentica per il momento questo paragrafo.
In tutti i casi in cui il metodo non ha senso che sia invocato su uno specifico oggetto. Ad esempio:
- metodi di "utilità" (es. i max, random, sin, ecc... di Math)
- metodi "factory" (tipo es. getInstance)