Java Constant

2025年3月26日 | 6分钟阅读

顾名思义,常量是编程中一个不可变的实体。换句话说,它的值不能被改变。通常,为了实现这一点,变量会使用 final 关键字声明。常量经常用于表示在程序运行时不会改变的稳定值,例如数学常数、配置设置或标志值。将变量声明为常量可以确保其值保持不变,不会被意外更改。为了方便阅读,常量通常用大写字母表示,单词之间用下划线分隔。此外,变量可以指定为实例级别(非静态常量)或类级别(静态常量)。

什么是常量?

常量是指赋值后值不可改变的数值。Java 不直接支持常量。在 Java 中,可以通过使用非访问修饰符 static 和 final 来定义常量。

如何在 Java 中声明常量?

Java 中,要将任何变量声明为常量,我们使用 staticfinal 修饰符。它们也被称为非访问修饰符。根据 Java 命名约定,标识符名称必须为大写字母

Static 和 Final 修饰符

  • 使用 static 修饰符的目的是为了管理内存。
  • 它还允许在不加载其所在类任何实例的情况下访问该变量。
  • final 修饰符表示该变量的值不能被更改。它还使原始数据类型不可变或不可更改。

声明常量的语法如下:

例如,price 是一个我们想使其成为常量的变量。

其中 static 和 final 是非访问修饰符。double 是数据类型,PRICE 是标识符名称,值为 432.78。

在上面的语句中,static 修饰符使变量在不加载其定义类的实例的情况下可用,而 final 修饰符使变量固定。

这里出现一个问题:为什么我们要同时使用 static 和 final 修饰符来声明常量?

如果我们只将一个变量声明为 static,那么该类(定义常量的类)的所有对象都可以访问该变量,并且可以更改其值。为了解决这个问题,我们使用 final 修饰符与 static 修饰符一起使用。

当变量被定义为 final 时,对于每个不同的对象都会创建多个相同的常量值实例,这是不希望的。

当我们同时使用 staticfinal 修饰符时,该变量保持静态,并且可以初始化一次。因此,为了将变量声明为常量,我们同时使用 static 和 final 修饰符。它为该类所有对象共享一个公共内存位置。

为什么我们使用常量?

在编程中使用常量可以使程序易于理解,其他人可以轻松理解。它还影响性能,因为常量变量会被 JVM 和应用程序缓存。

注意事项

  • 将我们想要声明为常量的标识符名称写成大写字母。例如,MAX=12
  • 如果我们使用 private 访问说明符放在常量名称之前,则在该特定类中不能更改常量的值。
  • 如果我们使用 public 访问说明符放在常量名称之前,则可以在程序中更改常量的值。

让我们看一些使用常量的示例。

示例 1:将常量声明为 private

ConstantExample1.java

输出

Java Constant

解释

Java 程序 ConstantExample1 定义了一个带有 main() 方法的类,用于根据固定的每单位价格确定总成本。为了保证其不可变性,它使用 final 关键字声明了一个值为 234.90 的常量 PRICE。

该应用程序要求用户输入使用的单位数量,使用扫描器读取输入,将每单位价格(PRICE)乘以使用的单位数量以确定总账单,然后显示需要支付的总金额。它说明了如何在 Java 中使用常量来表示程序执行期间不会改变的固定值。

示例 2

ConstantExample2.java

输出

Java Constant

解释

在上面的程序中,我们定义了两个类,名为 ConstantExample2 和 ConstantExample。值为 2999 的 PRICE 常量在 ConstantExample2 类中声明。该类的 main() 方法使用此常量打印铁的先前价格。创建类的实例时,也会调用 ConstantExample 类的 showPrice() 函数。在 ConstantExample 类中,使用值 3599 声明了另一个常量 PRICE。showPrice() 方法使用此常量输出当前的铁价。

示例 3:将常量声明为 public

在下面的示例中,我们声明了常量 PI 为 public。在 main() 方法中,我们将 3.15 赋值给常量 PI。之后,我们调用了 printValue() 方法。当我们执行程序时,它会显示一个错误:“无法为 final 变量 PI 赋值”。

ConstantExample3.java

输出

Java Constant

解释

Java 程序 ConstantExample3 定义了一个包含 printValue() 和 main 两个方法的类。为确保其不可变性,它使用 final 关键字声明了一个值为 3.14 的常量 PI。在 main 方法中调用 printValue() 方法来打印 PI 的初始值。

然后它试图给常量 PI 赋一个新值 (3.15),这是不允许的,因为它已被声明为 final。这将导致编译错误。为了强调 Java 中常量的不变性,再次调用 printValue() 方法以显示 PI 的值无法更改。

使用枚举 (enum) 作为常量

  • 它与 final 变量相同。
  • 它是一个常量列表。
  • Java 提供了 enum 关键字来定义枚举。
  • 它通过在类中创建枚举来定义一种类类型,该枚举可以包含实例变量、方法和构造函数。

枚举示例

输出

Java Constant

解释

Java 程序 EnumExample 定义了一个带有嵌套枚举 Color 的类。此枚举代表预定义的颜色 Red、Green、Blue、Purple、Black、White、Pink 和 Grey。

main() 方法中的 for-each 循环使用 values() 函数来迭代 Color 枚举的值,并将每种颜色打印到控制台。它演示了如何使用扩展 for 循环迭代枚举的元素,以及如何在 Java 中使用枚举来表示一组固定的常量。

结论

总之,常量对于 Java 编程至关重要,因为它们提供了在程序运行时不会改变的不可变值。通过结合使用 final 和 static 修饰符,可以声明变量为常量,确保一旦赋值就无法更改其值。

它提高了代码的可读性,保持了程序的完整性,并提高了性能,因为应用程序和 JVM 都会缓存常量变量。常量还遵循 Java 变量的命名约定,通常包括大写字母和下划线以便于阅读。

此外,枚举通过方便地建立一组相关的常量,为在程序中表示固定值提供了一种结构化的方法。通过理解并充分利用常量,Java 程序员可以创建更可靠、更易于管理的代码库。