#java #переменные #константа #статические_члены #финализированные_переменные
Для чего делать финализированную переменную статической?
В смысле, в каких случаях это имеет смысл и почему нельзя обойтись без этого?
Ответы
Ответ 1
Если коротко - можно обойтись и без этого, но так оптимальнее по памяти в общем случае. static final принадлежит классу, соответственно не зависимо от количества экземпляров этого класса будет создан только один объект типа static final переменной. В случае с просто final каждый объект будет содержать ссылку на новую копию. Если такая переменная содержит ссылку на объект, а не на примитивный тип, значение которого может быть закешировано (intern) - память будет израсходована на хранение одинаковых объектов. —- Так же есть различия в жизненном цикле(порядок инициализации). Статика будет проинициализирована во время загрузки класса класс-лоадером. Т.е. даже если ни один экземпляр этого класса никогда не будет создан. Просто final же напротив - будет проинициализирована в момент создания экземпляра. UPD: Таким образом получается что для всяких там строк и других immutable объектов, можно ставить static, чтобы не плодить идентичные копии, однако для объектов, которые содержат в себе какое-то состояние, которое может быть изменено со временем - уже стоит подумать ставить static или нет. Т.е. наличие директивы final еще не говорит о том что объект не поменяется со временем. final это атрибут поля, но никак не объекта на который ссылается это поле.
Комментариев нет:
Отправить комментарий