Acabei de ver um exemplo no Deitel e fiquei confuso:
public class Empregado {
private String nome;
private static int count = 0;
Construtor() {
++count;
}
public static int getCount() {
return count
}
A classe original tem mais coisas, mas isso é o que interessa para a pergunta.
Teoricamente eu entendi, mas como outras coisas em java eu falho em entender a utilidade.
Eu preciso do getCount() pois a variável de instancia é privada, mas qual é a diferença entre ela (variável) ser static ou não no caso?
getCount() não retornaria o valor independente da variável de instancia ser estática?
Ou ele precisa que ela seja estática para o método ser estático?
Você está confundindo variável de instância (existe uma cópia dela para cada objeto) com variável estática ou variável de classe (existe apenas uma instância dela e está associada à classe).
Nesse caso, “count” é uma variável que foi inicializada com 0 (private static int count = 0) quando a classe foi carregada no programa, e a cada vez que se cria um novo empregado , essa contagem de empregados criados é incrementada.
Percebi agora que escrevi errado mesmo, variável de instancia é a do objeto criado.
Mas a dúvida persiste.
Do que eu entendi que você falou a diferença do static é que nesse caso por exemplo a variável nome cada instancia vai ter um, enquanto a count vai ser uma só independente de quantos empregados forem criados.
Sim senhor, é isso mesmo, já que ela está amarrada “na classe”, não “na instância da classe” (objeto Empregado).
Uma forma de você perceber isso é você escrever um programa que cria 3 objetos do tipo Empregado. Você vai ver que “count” se mantém de uma criação para outra do objeto Empregado, o que não ocorre para a variável de instância “nome”.