Подтвердить что ты не робот

Статическая конечная переменная в Java

Возможный дубликат:
закрытый окончательный атрибут static vs private final attribute

Какая разница между объявлением переменной как

static final int x = 5;

или

final int x = 5;

Если я хочу, чтобы переменная была локальной, а константа (не может быть изменена позже)?

Спасибо

4b9b3361

Ответ 1

Просто final будет иметь ожидаемый эффект.

Объявление static делает его переменной класса, к нему можно получить доступ через имя класса <ClassName>.x

Ответ 2

Объявление поля как "final" гарантирует, что поле является константой и не может измениться. Разница заключается в использовании ключевого слова static.

Объявление поля как статического означает, что оно связано с типом, а не с экземплярами. то есть только одна копия поля будет присутствовать для всех объектов, а не отдельной копии для каждого объекта. Из-за этого к статическим полям можно получить доступ через имя класса.

Как вы можете видеть, ваше требование, чтобы поле было постоянным, достигается в обоих случаях (объявляя поле "final" и "final final" ).

Аналогичный вопрос: закрытый окончательный атрибут static vs private final attribute

Надеюсь, что это поможет

Ответ 3

В первом утверждении вы определяете переменную, которая является общей для всех объектов (статическое поле класса).

Во втором утверждении вы определяете переменную, которая принадлежит каждому созданному объекту (много копий).

В вашем случае вы должны использовать первый.

Ответ 4

Для примитивных типов "final static" будет правильным объявлением для объявления константы. Нестатическая конечная переменная имеет смысл, когда она является постоянной ссылкой на объект. В этом случае каждый экземпляр может содержать свою собственную ссылку, как показано в JLS 4.5.4.

См. ответ Павла для правильного ответа.