Чи декларування змінної 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першого, який дає вам більше контролю. IMO, ви можете буквально замінити 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;
}
}