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

Как объявить константу в Java

Мы всегда пишем:

public static final int A = 0;  

Вопрос:

  • Является ли static final единственным способом объявления константы в классе?
  • Если я пишу public final int A = 0; вместо этого, A еще константа или просто поле экземпляра ?
  • Что такое переменная экземпляра ? Какая разница между переменной экземпляра и полем экземпляра?
4b9b3361

Ответ 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 для лучшего понимания,