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 variableporque possui um valor único para isso, classenquanto o outro é chamado instance variableporque 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 staticlhe 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 variableem Java?
Logicamente, private static variablenão é diferente do que public static variableo primeiro oferece mais controle. IMO, você pode literalmente substituir public static variablepor private static variablecom a ajuda de public staticmétodos get e set.
Uma área amplamente usada private static variableé na implementação de Singletonpadrões simples, onde você terá apenas uma instância dessa classe no mundo inteiro. Aqui, o staticidentificador 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;
}
}