Страницы

Поиск по вопросам

пятница, 29 ноября 2019 г.

private static и private final static - зачем?

#java


В каких случаях следует помечать переменные таким образом? Какой толк от static,
если он помечен как private?
    


Ответы

Ответ 1



Посмотрите данные по шаблону проектирования singleton. private static гарантирует единственность экземпляра объекта с такими свойствами в потоке, где задействован класс. private static final гарантирует, что этот экземпляр не подменится на что-то другое. Удобно при работе с базами данных или каким-то ресурсом, не склонным к разделению.

Ответ 2



Какой толк от static, если он помечен как private? Необходимо, если переменную нужно использовать в статических методах public class CarFactoryFacade { private static CarFactory audiFactory = new AudiCarFactory(); private CarFactory bmwFactory = new BMWCarFactory(); public static Car createAudi() { return audiFactory.createCar(); } public static Car createBMW() { return bmwFactory.createCar(); <-- ошибка } private final static - зачем? Final нужно использовать, если ссылка будет инициализироваться один раз и не должна быть заменена. В большинстве случаев static переменные именно так и используются. Если static переменная изменяется в ходе программы, скорее всего есть какие то проблемы с дизайном (static - отсутствие экземпляра объекта, в каком то смысле отсутствие состояния, изменение ссылки - смена состояние -> противоречие).

Ответ 3



Модификаторы доступа static final следует применять, когда есть необходимость явно указать на то, что переменную не следует или запрещено изменять, то есть модификаторы static final превращают переменную в константу. В свою очередь переменные помеченные модификатором static являются обычными переменными с тем лишь различием, что их экземпляр (в единственном числе) хранится не с экземпляром каждого создаваемого объекта (области памяти где хранятся переменные экземпляра), а в объекте который описывает ваш класс при этом на каждой JVM такой объект существует в единственном экземпляре. С переменными объявленными как static можно делать все то же что и с обычными переменными при этом для доступа к таким переменным ненужно (но можно получить доступ и через переменную экземпляра) создавать экземпляр класса (конечно если переменная имеет модификатор доступа public), например, создадим класс содержащий статическую переменную: public class MyClass{ public static int classVariable = 10; } Получение подступа к статической переменной: MyClass.classVariable; Присваиваем новое значение статической переменной: MyClass.classVariable = 100; Такие переменные следует применять, когда есть необходимость иметь одну переменную на все экземпляры классов или если необходимо использовать переменную в статическом методе (переменные экземпляра в таком методе недоступны так как экземпляров класса может вообще не существовать на момент вызова статического метода). При использовании модификатора private свойства переменной и «константы» не изменяются, изменяется лишь доступность переменной/константы.

Комментариев нет:

Отправить комментарий