Os membros não-estaticos (comuns) pertencem a um objeto, enquanto um estatico pertence à classe, ou seja, não está associado a nenhum objeto especifico, só existe um e ele pertence à classe…
ex.:
public class Usuario{
public String nome;
}
nesse caso cada objeto da classe Usuario tem uma atributo nome, ele é particular daquele objeto especifico…
Usuario u1 = new Usuario();
u1.nome = "Jair";
Usuario u2 = new Usuario();
u2.nome = "Elton";
nesse momente existem duas variaveis nome, e cada uma tem seu proprio valor…
public class Usuario{
public static String nome;
}
nesse caso o atributo pertence à classe, sejam quantos forem os objetos instanciados dessa classe, haverá apenas uma variavel nome…
Usuario.nome = "Jair";
Usuario.nome = "Elton";
veja que um está substituindo o outro, pois existe uma unica variavel…
no que diz respeito a memoria faz diferença pois como eu disse quando é estatico só existe um na memoria, enquanto se não for estatico existem tantos quantos objetos existirem…
Você usa um membro estatico quando ele não diz respeito a um objeto em particular, e sim à classe… quando você quer compartilhar uma informação com todas as instancias da classe, ou quando tiver um metodo utilitario que você não quer ficar criando instancias para acessa-lo…