Declarar uma variável private static varName;
diferente de declarar uma variável private varName;
?
Sim, ambos são diferentes. E o primeiro é chamado class variable
porque possui um valor único para isso, class
enquanto o outro é chamado instance variable
porque pode conter um valor diferente para diferente instances(Objects)
. O primeiro é criado apenas uma vez na jvm e o outro é criado uma vez por instância, ou seja, se você tiver 10 instâncias, terá 10 diferentes private varName;
na jvm.
Declarar a variável como static
lhe dá outras propriedades especiais?
Sim, variáveis estáticas obtêm algumas propriedades diferentes das variáveis de instância normais. Já mencionei alguns e vamos ver alguns aqui: class variables
(variáveis de instância declaradas como estáticas) podem ser acessadas diretamente usando o nome da classe como ClassName.varName
. E qualquer objeto dessa classe pode acessar e modificar seu valor, ao contrário das variáveis de instância que são acessadas apenas por seus respectivos objetos. Variáveis de classe podem ser usadas em métodos estáticos.
Qual é o uso de a private static variable
em Java?
Logicamente, private static variable
não é diferente do que public static variable
o primeiro oferece mais controle. IMO, você pode literalmente substituir public static variable
por private static variable
com a ajuda de public static
métodos get e set.
Uma área amplamente usada private static variable
é na implementação de Singleton
padrões simples, onde você terá apenas uma instância dessa classe no mundo inteiro. Aqui, o static
identificador desempenha um papel crucial para tornar essa instância única acessível pelo mundo exterior (é claro que o método público getter estático também desempenha um papel principal).
public class Singleton {
private static Singleton singletonInstance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return Singleton.singletonInstance;
}
}