Propriedades estáticas em Java

Esta dúvida também apareceu semana passada

Se eu criar uma propriedade estática do tipo contador e incrementa-la no construtor do objeto

public class Usuario {
      private static int contador = 0;
      //Construtor
      public Usuario() {
              contador++;
      }
      //Exibe o valor
       public void exibirContador() {
               System.out.println(“No. de Usuarios: ” + contador);
       }
}

E criar e instanciar 5 objetos desta classe, não importa em qual objeto chamar o método exibirContador, que ele sempre retornará o mesmo valor, ou seja, 5 (é como se a variável fosse global):

Usuario u1 = new Usuario();
Usuario u2 = new Usuario();
Usuario u3 = new Usuario();
Usuario u4 = new Usuario();
Usuario u5 = new Usuario();

u2.exibirContador(); //Tente trocar para qualquer outro objeto que sempre dará o mesmo valor

Outra dúvida que surgiu é a chamada desta variável. Será que é possível chamar assim:
      public Usuario() {
              contador++;
      }
Ou assim:
      public Usuario() {
              this.contador++;
      }

Ou assim:
      public Usuario() {
              Usuario.contador++;
      }

Sim, por incrivel que pareça, é possível. (agora, não me pergunte o porque parece que isso tem haver com escopo da variável e outras coisas a mais que não faço a menor idéia de como funciona )

Que confusão Será que eu consegui explicar alguma coisa?
Bem, de qualquer forma, é bom testar o código acima 😛

Programação Java é aqui. Acesse as o blog para ficar atualizado sobre o mundo da **Linguagem Java. Dicas, informações e muitos truques para se usar no dia-a-da do **programador java.