Объявление переменной как private static varName;
отличается от объявления переменной private varName;
?
Да, оба они разные.И первый называется class variable
, потому что он содержит одно значение для этого class
, тогда как другой называется instance variable
, потому что он может содержать другое значение для разных instances(Objects)
.Первый создается только один раз в jvm, а другой создается один раз для каждого экземпляра, т. Е. Если у вас есть 10 экземпляров, то у вас будет 10 различных private varName;
в jvm.
Дает ли объявление переменной static
другие специальные свойства?
Да, статические переменные получают некоторые свойства, отличные от обычных переменных экземпляра.Я уже упомянул немного, и давайте посмотрим некоторые здесь: class variables
(переменные экземпляра, которые объявлены как статические) могут быть доступны напрямую, используя имя класса, например ClassName.varName
.И любой объект этого класса может получить доступ и изменить его значение в отличие от переменных экземпляра, доступных только его соответствующим объектам.Переменные класса могут использоваться в статических методах.
Какая польза от private static variable
в Java?
Логически, private static variable
ничем не отличается от public static variable
, скорее первый дает вам больше контроля,ИМО, вы можете буквально заменить public static variable
на private static variable
с помощью public static
методов получения и установки.
Одна широко используемая область private static variable
находится в реализации простого шаблона Singleton
, где у вас будет только один экземпляр этого класса во всем мире.Здесь идентификатор static
играет решающую роль, чтобы сделать этот единственный экземпляр доступным для внешнего мира (конечно, публичный статический метод получения также играет основную роль).
public class Singleton {
private static Singleton singletonInstance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return Singleton.singletonInstance;
}
}