我们总是写:
public static final int A = 0;
问题:
- 是在类
static final
中声明常量的唯一方法吗? - 如果我改写
public final int A = 0;
,A
仍然是一个常量还是只是一个实例字段? - 什么是实例变量?实例变量和实例字段有什么区别?
final
意味着初始化后该值不能更改,这就是使其成为常量的原因。static
意味着不是为每个对象中的字段分配空间,而是为类创建一个实例。
因此,static final
意味着无论创建多少对象,都只有一个变量实例,并且该变量的值永远不会改变。
enum
Java 5 及更高版本中的类型用于您所描述的目的。它是类型安全的。如果您在谈论实例变量和类变量之间的区别,则每个创建的对象都存在实例变量。而无论创建的对象数量如何,类变量每个类加载器只有一个副本。
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;
}
}
如果您希望更改您创建的枚举的值,请提供一个 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;
}
}
访问示例:
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 教程以获得更好的理解,