Почему переменная должна быть объявлена ​​как static и final - PullRequest
2 голосов
/ 27 июня 2011

Переменная объявляется как static для получения последней и единственной копии ее значения; это означает, что значение будет где-то изменено. Но почему такая же переменная должна быть объявлена ​​как final, что не позволит изменить ее где-либо еще (постоянное значение)?

Ответы [ 12 ]

11 голосов
/ 27 июня 2011

static, чтобы к переменной или методу можно было обращаться без создания экземпляра класса, а для класса была только одна переменная, а не одна для каждого экземпляра.

Класс final не может быть расширен. Переменная final не может изменить свое значение, она ведет себя как константа. И метод final нельзя переопределить.

3 голосов
/ 27 июня 2011

Если переменная определена как final, ее, вероятно, не следует называть «переменной», поскольку она больше не «меняется»:)

Переменная static не привязана клюбой конкретный экземпляр класса - он привязан только к самому классу и только с точки зрения области видимости.

Итак, вы - переменная static и final на самом деле является значением, котороене привязан к какому-либо конкретному экземпляру класса и не меняется.Это постоянное значение, на которое нужно ссылаться из любого места в вашем Java-коде.

В какой-то момент, когда вы решите изменить значение этой константы, требуется всего одно изменение, чтобы правильно распространить это изменение на вседругие классы, которые используют эту константу.

2 голосов
/ 27 июня 2011

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

1 голос
/ 27 июня 2011

Как вы упоминаете, это сделано для создания констант. Вы создаете одно поле для хранения значения с определенным значением. Таким образом, вам не нужно объявлять это значение везде, но вместо этого вы можете ссылаться на статическое.

1 голос
/ 27 июня 2011

Может быть, предоставить что-то похожее на constants.

1 голос
/ 27 июня 2011

Статика не имеет ничего общего с получением последней и единственной копии, если только «единичная копия» здесь не означает одно и то же значение для всех экземпляров класса (однако, я думаю, вы можете путать его с volatile).Статический означает переменную класса.Вы делаете его окончательным, когда хотите, чтобы это было константой (именно так декларируются константы Java: static final).

1 голос
/ 27 июня 2011

static поля могут быть изменены (например, public static поля могут быть изменены любым классом).static final поля не могут быть изменены после инициализации.

1 голос
/ 27 июня 2011

static final используется в Java для выражения констант.Статика используется для выражения переменных класса, поэтому нет необходимости создавать экземпляр объекта для этого класса для доступа к этой переменной.

Финальные методы не могут быть переопределены, а финальные переменные могут быть инициализированы только один раз.

Если вы используете только ключевое слово static, это значение не будет константой, поскольку его можно будет снова инициализировать.

1 голос
/ 27 июня 2011

local variables находятся в стеке и не являются статичными.

Вы можете иметь статический field, который может быть или не быть окончательным.Вы сделаете поле финальным, если оно не изменится.

0 голосов
/ 21 февраля 2017

Переменные должны быть объявлены как fields, только если они required для use в more than one методе класса или если программа должна save their values между вызовами методов класса.

например user.lastName lastName должно быть полем, потому что это needed во время object lifecycle

Переменные должны быть объявлены как static, только если они not необходимы для использования более чем в одномметод класса или если программа должна not сохранять их значения между вызовами методов класса.

например Math.max(num1,num2) Im not intristed в num1 и num2 after compleating эта операция

...