Quote Originariamente inviata da newutente Visualizza il messaggio
Se non ho capito male le variabili vengono dichiarate statiche nel momento in cui ho bisogno di una variabile che non sia condivisa da tutte le istanze di una classe (nel senso che ogni istanza ha una sua "versione" della variabile") ma che sia unica e che quindi ad ogni istanziazione di un nuovo oggetto non venga per così dire riazzerata.
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.

Quote Originariamente inviata da newutente Visualizza il messaggio
Non mi è chiaro però il perchè dovrei dichiarare un metodo come statico.
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)