В java константы, известные как ключевое слово (final) со значением, которое никогда не изменится. Я видел, как некоторые люди создают константы без объявления статического модификатора. Мой вопрос: должны ли константы быть объявлены как статические? Если да, то нет?Константы Java и статические модификаторы
ответ
Если вы присваиваете значение переменной final
при ее объявлении, в ней нет смысла не быть static
, так как каждый экземпляр имеет свою переменную, имеющую то же значение, которое является расточительным.
Однако, если вам нужна переменная экземпляра, значение которой может быть установлено только один раз (но разные экземпляры могут иметь разные значения), эта переменная должна быть final
, но не static
.
Например:
class Person
{
final int id;
public Person(int id) {
this.id = id;
}
}
Технически, ключевое слово final
достаточно для постоянной, так как вы не можете изменить значение конечных переменных после своего назначения.
static
следует использовать, если константа не привязана к конкретному экземпляру объекта.
Например, у вас есть класс Circle
, и у вас есть способ расчета площади. Для этого вам понадобится константа Pi
. Pi
константа не меняется от круга к кругу. Поэтому имеет смысл объявить Pi статическим финалом.
Что бы вы ни хотели. Я лично использовал бы статику. Вам не нужно создавать объект при объявлении его статичным. Также вы можете создать файл констант, в котором хранятся все константы. public final static ...
Таким образом, вы в основном используете статический финал, если он является «константой», используемой всеми объектами. Если нет, просто сделайте это окончательным и передайте его через конструктор.
Вы сначала должны понять, что постоянные делать (то есть то, что происходит, когда вы отмечаете поле/локальную переменную как final
.)
Когда примитив/String поле помечается как final
, его становится константой времени компиляции, т. е. ее значение передается как часть самого байт-кода. Таким образом, его значение равно рассчитано/сгенерировано по состоянию на runtime. Это дает вам преимущество в производительности.
Ключевое слово static
используется, чтобы сказать - это поле НЕ уникально для каждого экземпляра класса. Вы могли бы иметь нестатические константы final
. Кроме того, если локальная переменная метода (примитив) отмечена как final
, она также становится постоянной.
Итак, нет, static
не имеет ничего общего с константами. Это дизайн выбор.
Константы с ключевым словом «final» никогда не изменятся. Обычно u не может изменить экземпляр, к которому это поле относится, но вы можете изменять значения внутри этого экземпляра.
Представьте себе этот пример:
class SomeClass{
final Car MYCAR;
...
}
С помощью этого кода вы не сможете изменить ссылку на MYCAR
:
myCar = new Car(.....);
Но вы можете сделать что-то вроде:
myCar.setPrice(10000);
Так что да, есть пункт НЕ делать это поле static
, если у какого-либо экземпляра SomeClass
должна быть своя копия объекта MYCAR
, но вы не хотите, чтобы кто-либо менял ссылку на этот объект.
Когда вы используете ключевое слово 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.
*/
}
- 1. Статические библиотеки и константы
- 2. Статические константы
- 3. Невозможно объявить константы Java как статические
- 4. Статические константы: как?
- 5. Статические константы в C#
- 6. Как обрабатываются статические константы?
- 7. Как иметь статические константы в классе cpp?
- 8. getHeight() и константы (java)
- 9. Константы и свойства в java
- 10. модификаторы доступа в Java
- 11. Модификаторы метода в Java
- 12. Модификаторы классов Java
- 13. Java-головоломка: модификаторы
- 14. Константы на стороне клиента Java/GWT: статические окончательные vs Enums
- 15. модификаторы для классов Java
- 16. Модификаторы Java-доступа
- 17. @ Override годов, Acces Модификаторы и подтипы ... (Java)
- 18. Статические инициализаторы и статические методы в Java
- 19. Как публичные/частные и статические модификаторы Java влияют на несколько переменных, объявленных в одной строке?
- 20. Статические константы в глобальных функциях в C++
- 21. Локальные статические константы в Вале: возможно?
- 22. Класс FieldOperator не содержит статические константы
- 23. Допустимые модификаторы для Java класса
- 24. модификаторы доступа Java по умолчанию
- 25. Модификаторы видимости обхода в Java
- 26. Немного смущен про модификаторы Java
- 27. Статические переменные в PHP - нечто иное, чем литералы и константы!
- 28. Модификаторы Scala и параметрирование
- 29. массивы и статические методы java
- 30. Java статические инициализаторы и отражение
Любой прецедент? пример ? –