Java 中的 final static 变量

2024 年 9 月 10 日 | 阅读 3 分钟

不建议在实例变量值未改变时使用实例变量。此时,我们可以将该变量声明为 static。当我们声明变量为 static 时,会在类级别创建一个唯一的变量,并被所有对象共享。对此 static 变量的任何修改都会影响其他所有对象的操作。如果我们不初始化 static 变量,JVM 会自动为其分配一个默认值。

但是,在声明 static 变量时使用 final 修饰符,我们必须遵守适当的约定。

  • 如果一个变量主要被声明为 static,那么声明该变量的类的一个或多个实例可以修改其值。
  • 您可以通过将它们声明为 static final 来创建常量。变量只有一个副本,并且不能重新初始化。

关于 final static 变量的重要注意事项

1. 变量初始化是强制性的

当一个 static 变量被声明为 final 时,无论是否使用,都需要手动初始化,因为 JVM 不会为 final static 变量提供默认值。

文件名: ExampleProgram.java

输出

error: variable value not initialized in the default constructor

2. 类加载前的初始化

在类加载完成之前,我们必须对 final static 变量进行初始化。final static 变量可以在声明时进行初始化。

文件名: ExampleProgram2.java

输出

56

3. 在 static 块中初始化

由于我们必须在类之前创建 final static 变量,并且知道 static 块在 main() 方法之前执行,所以我们也可以在 static 块中初始化 final static 变量。

文件名: ExampleProgram.java

输出

Value of MAX_VALUE: 100

如果我们尝试在上述方法以外的地方初始化 final static 变量,我们会收到编译时错误。

文件名: ExampleProgram.java

输出

error: cannot assign a value to final variable value

final static 变量的实现

让我们看一个可以使用 final static 变量的示例。

文件名: Circle.java

输出

Circle 1 - Radius: 5
Circle 1 - Area: 78.53975
Circle 1 - Circumference: 31.4159
Circle 2 - Radius: 10
Circle 2 - Area: 314.159
Circle 2 - Circumference: 62.8318