Geralmente, é fácil acessar um membro estático. Você acabou de colocar o nome da classe antes do método ou variável e pronto. Por exemplo:
System.out.println(Koala.count);
Koala.main(new String[0]);
Ambos são agradáveis e fáceis. Há uma regra que é mais complicada. Você pode usar uma instância do objeto para chamar um método estático. O compilador verifica o tipo da referência e usa isso em vez do objeto - que é sorrateiro de Java. Este código é perfeitamente legal:
5: Koala k = new Koala();
6: System.out.println(k.count); // k is a Koala
7: k = null;
8: System.out.println(k.count); // k is still a Koala
Acredite ou não, esse código gera 0 duas vezes. A linha 6 vê que k é um Koala e a contagem é um variável estática, então ela lê essa variável estática. A linha 8 faz a mesma coisa. Java não se importa esse k é nulo . Como estamos procurando uma estática, isso não importa.
Lembre-se de olhar para o tipo de referência para uma variável quando vir um método estático ou uma variável. Os criadores do exame tentarão induzi-lo a pensar: Uma NullPointerException é lançada porque a variável é nulo . Não se deixe enganar!
Mais uma vez, porque isso é realmente importante: o que a seguinte saída gera?
Koala.count = 4;
Koala koala1 = new Koala();
Koala koala2 = new Koala();
koala1.count = 6;
koala2.count = 5;
System.out.println(Koala.count);
Felizmente, você respondeu 5. Existe apenas uma variável de contagem , pois é estática. Está definido como 4, depois 6, e finalmente chega a 5. Todas as variáveis de Koala são apenas distrações.
Felizmente, quando isso acontece, podemos apenas nos referir aos membros estáticos através do nome da classe em o código em vez de tentar usar uma importação estática.