почему константы Java объявлены статическими? - PullRequest
28 голосов
/ 11 ноября 2011

Почему константы Java объявлены статическими?

class Foo{
    static final int FII = 2 ;
}

В этом я понимаю использование финала? Купить почему оно должно быть статичным? Почему это должна быть переменная класса, а не переменная экземпляра?

Ответы [ 3 ]

85 голосов
/ 11 ноября 2011

Если константа не является статической, Java будет выделять память для этой константы в каждом объекте класса (т.е. одна копия константы на объект).

Если константа является статической, для этого класса будет только одна копия константы (т.е. одна копия на класс).

Следовательно, если константа имеет только одно значение, она должна быть объявлена ​​статической.

Если константа может иметь разные значения для каждого объекта, например время создания объекта, она не должна объявляться статической.

33 голосов
/ 11 ноября 2011

Если он может варьироваться в зависимости от класса, то это явно не константа .Что бы означало получать разные значения pi для каждого экземпляра Math (не то, что Math даже позволяет создавать экземпляры)?Или различный регистронезависимый порядок для каждого экземпляра String?

12 голосов
/ 11 ноября 2011

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

Требование создания экземпляра только для доступа к постоянным полям - пустая трата ресурсов.

...