Чи декларування змінної 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;
}
}