如何在Java中声明一个常量

Bin*_*n_Z 60 java constants

我们总是写:

public static final int A = 0;  
Run Code Online (Sandbox Code Playgroud)

题:

  1. 是在类中static final声明常量的唯一方法吗?
  2. 如果我改写public final int A = 0;,A仍然是一个常量或只是一个实例字段
  3. 什么是实例变量实例变量实例字段之间有什么区别?

Pet*_*ren 62

final表示初始化后无法更改该值,这就是使其成为常量的原因.static意味着不是为每个对象中的字段分配空间,而是只为该类创建一个实例.

因此,static final无论创建了多少个对象,并且该变量的值永远不会改变,因此只表示变量的一个实例.


Oh *_*oon 38

  1. 您可以enum在Java 5及更高版本中使用类型,以实现您所描述的目的.它是类型安全的.
  2. A是实例变量.(如果它有静态修饰符,则它变为静态变量.)常量只表示该值不会改变.
  3. 实例变量是属于对象而不是类的数据成员.实例变量=实例字段.

如果您正在讨论实例变量和类变量之间的区别,则每个创建的对象都存在实例变量.而类变量每个类加载器只有一个副本,而不管创建的对象数是多少.

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

如果要更改已创建的枚举的值,请提供mutator方法.

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;
  }
}
Run Code Online (Sandbox Code Playgroud)

访问示例:

public static void main(String args[]){
  System.out.println(Color.RED.getColor());

  // or

  System.out.println(Color.GREEN);
}
Run Code Online (Sandbox Code Playgroud)