如何在Java中声明一个常量

How to declare a constant in Java

我们总是写:

1
public static final int A = 0;

问题:

  • static final是声明类中常量的唯一方法吗?
  • 如果我改为写public final int A = 0;,那么A是常量还是仅仅是一个实例字段?
  • 什么是实例变量?实例变量和实例字段有什么区别?

  • final表示初始化后不能更改值,这就是使其成为常量的原因。static意味着,除了为每个对象中的字段分配空间之外,只为类创建一个实例。

    因此,static final意味着无论创建了多少个对象,变量的值都只能有一个实例。


  • 您可以在Java 5中使用EDCOX1×4的类型,并针对您所描述的目的继续使用。它是类型安全的。
  • A是一个实例变量。(如果它有静态修饰符,那么它就变成一个静态变量。)常量只是意味着值不会改变。
  • 实例变量是属于对象而不是类的数据成员。实例变量=实例字段。
  • 如果您谈论的是实例变量和类变量之间的区别,那么每个创建的对象都存在实例变量。尽管类变量对于每个类加载器只有一个副本,而不管创建的对象的数量如何。

    Java 5和UP EDCOX1×4类型

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    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;
      }
    }

    如果希望更改已创建枚举的值,请提供一个mutator方法。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    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;
      }
    }

    访问示例:

    1
    2
    3
    4
    5
    6
    7
    public static void main(String args[]){
      System.out.println(Color.RED.getColor());

      // or

      System.out.println(Color.GREEN);
    }


    任何是static的东西都在类级别。您不必创建实例来访问静态字段/方法。加载类时将创建一次静态变量。实例变量是与对象关联的变量。这意味着实例变量是为您创建的每个对象创建的。所有对象都将有单独的实例变量副本。在您的例子中,当您声明它为static final时,这只是变量的一个副本。如果您从多个实例更改它,同一个变量将被更新(但是,您有final变量,因此无法更新)。在第二种情况下,final int a也是常量,但是每次创建声明该变量的类的实例时都会创建它。

    看看这个Java教程,以便更好地理解,