2015-09-14 2 views
2

В java константы, известные как ключевое слово (final) со значением, которое никогда не изменится. Я видел, как некоторые люди создают константы без объявления статического модификатора. Мой вопрос: должны ли константы быть объявлены как статические? Если да, то нет?Константы Java и статические модификаторы

+0

Любой прецедент? пример ? –

ответ

3

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

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

Например:

class Person 
{ 
    final int id; 
    public Person(int id) { 
     this.id = id; 
    } 
} 
0

Технически, ключевое слово final достаточно для постоянной, так как вы не можете изменить значение конечных переменных после своего назначения.

static следует использовать, если константа не привязана к конкретному экземпляру объекта.

Например, у вас есть класс Circle, и у вас есть способ расчета площади. Для этого вам понадобится константа Pi. Pi константа не меняется от круга к кругу. Поэтому имеет смысл объявить Pi статическим финалом.

0

Что бы вы ни хотели. Я лично использовал бы статику. Вам не нужно создавать объект при объявлении его статичным. Также вы можете создать файл констант, в котором хранятся все константы. public final static ...

Таким образом, вы в основном используете статический финал, если он является «константой», используемой всеми объектами. Если нет, просто сделайте это окончательным и передайте его через конструктор.

2

Вы сначала должны понять, что постоянные делать (то есть то, что происходит, когда вы отмечаете поле/локальную переменную как final.)

Когда примитив/String поле помечается как final, его становится константой времени компиляции, т. е. ее значение передается как часть самого байт-кода. Таким образом, его значение равно рассчитано/сгенерировано по состоянию на runtime. Это дает вам преимущество в производительности.

Ключевое слово static используется, чтобы сказать - это поле НЕ уникально для каждого экземпляра класса. Вы могли бы иметь нестатические константы final. Кроме того, если локальная переменная метода (примитив) отмечена как final, она также становится постоянной.

Итак, нет, static не имеет ничего общего с константами. Это дизайн выбор.

0

Константы с ключевым словом «final» никогда не изменятся. Обычно u не может изменить экземпляр, к которому это поле относится, но вы можете изменять значения внутри этого экземпляра.

Представьте себе этот пример:

class SomeClass{ 
final Car MYCAR; 
... 
} 

С помощью этого кода вы не сможете изменить ссылку на MYCAR:

myCar = new Car(.....);

Но вы можете сделать что-то вроде:

myCar.setPrice(10000);

Так что да, есть пункт НЕ делать это поле static, если у какого-либо экземпляра SomeClass должна быть своя копия объекта MYCAR, но вы не хотите, чтобы кто-либо менял ссылку на этот объект.

0

Когда вы используете ключевое слово static в классе все экземпляры класса. т. е. все объекты класса имеют одну и ту же переменную, где, как если бы вы объявили класс как final, он не может быть создан (объект не может быть создан). Поэтому, если вы объявите переменную final, тогда ее можно присвоить значение только один раз. Предположим, что

class CalculateArea { 

    final static double PI = 3.1417; 
    /*write rest of the code to calculate area. 
    the value of PI will remain constant no matter 
     how many times its object is made 
    if you try to override the value of `PI` it will raise an error. 
    */ 
} 
Смежные вопросы