Как объявить константу в Java
Мы всегда пишем:
public static final int A = 0;
Вопрос:
- Является ли
static final
единственным способом объявления константы в классе?
- Если я пишу
public final int A = 0;
вместо этого, A
еще константа или просто поле экземпляра ?
- Что такое переменная экземпляра ? Какая разница между переменной экземпляра и полем экземпляра?
Ответы
Ответ 1
- Вы можете использовать тип
enum
в Java 5 и далее для описанной цели. Это безопасный тип.
- A - переменная экземпляра. (Если у него есть статический модификатор, он становится статической переменной.) Константы просто означают, что значение не изменяется.
- Переменные экземпляра - это члены данных, принадлежащие объекту, а не классу. Переменная экземпляра = поле экземпляра.
Если вы говорите о разнице между переменной экземпляра и переменной класса, переменная экземпляра существует для каждого созданного объекта. Хотя переменная класса имеет только одну копию для каждого загрузчика классов независимо от количества созданных объектов.
Java 5 и enum
тип
public enum Color{
RED("Red"), GREEN("Green");
private Color(String color){
this.color = color;
}
private String color;
public String getColor(){
return this.color;
}
public String toString(){
return this.color;
}
}
Если вы хотите изменить значение созданного перечисления, укажите метод мутатора.
public enum Color{
RED("Red"), GREEN("Green");
private Color(String color){
this.color = color;
}
private String color;
public String getColor(){
return this.color;
}
public void setColor(String color){
this.color = color;
}
public String toString(){
return this.color;
}
}
Пример доступа:
public static void main(String args[]){
System.out.println(Color.RED.getColor());
// or
System.out.println(Color.GREEN);
}
Ответ 2
final
означает, что после инициализации значение не может быть изменено, что делает его константой. static
означает, что вместо пространства, выделенного для поля в каждом объекте, для класса создается только один экземпляр.
Итак, static final
означает только один экземпляр переменной независимо от того, сколько объектов создано, и значение этой переменной никогда не изменится.
Ответ 3
Все, что есть static
, находится на уровне класса. Вам не нужно создавать экземпляр для доступа к статическим полям/методам. Статическая переменная будет создана один раз при загрузке класса.
Переменные экземпляра - это переменная, связанная с объектом, что означает, что переменные экземпляра создаются для каждого создаваемого вами объекта. Все объекты будут иметь отдельную копию переменной экземпляра для себя.
В вашем случае, когда вы объявили его как static final
, это только одна копия переменной. Если вы измените его на несколько экземпляров, одна и та же переменная будет обновлена (однако у вас есть переменная final
, поэтому она не может быть обновлена).
Во втором случае final int a
также является константой, однако он создается каждый раз, когда вы создаете экземпляр класса, в котором объявлена эта переменная.
Посмотрите этот учебник по Java для лучшего понимания,