java - final关键字可以单独用于在java中定义常量吗

标签 java variables static constants final

java文档中提到

The static modifier, in combination with the final modifier, is also used to define constants.

我只是想知道,java中可以单独使用final关键字来定义常量吗?我知道用 final 关键字和没有 static 关键字声明的变量不能改变,但它算作一个常量吗?

最佳答案

您需要static 关键字来消除Class 实例的上下文。 看看下面的代码:

public class Main {

public static final String CONST;

static {
    if((System.currentTimeMillis() % 2) == 0) {
        CONST = "FOO";
    }
    else {
        CONST = "BAR";
    }
}

public final String CONST2;

public Main(){
    if((System.currentTimeMillis() % 2) == 0) {
        CONST2 = "FOO";
    }
    else {
        CONST2 = "BAR";
    }   
}

虽然创建 Main 的多个实例将导致 CONST2 的值不同,但 CONST 将在类加载时初始化,因此保持不变在 Main 的几个实例中相同。

更有趣的是,如果涉及多个 ClassLoader,您甚至可能有一个具有不同值的 static final 变量。

因此,Java 中的常量是用常量值初始化的最终静态变量。

关于java - final关键字可以单独用于在java中定义常量吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36453413/

相关文章:

Java DecimalFormat 包含左侧的所有数字

java - JDialog 处理另一个窗口

c# - 在类之间发送值的正确方法

php - 单击链接时运行 php 代码

java - 创建对象后不能从静态上下文引用非静态变量

java - 错误 : field name cannot be declared static

java - 找不到DynamoDB地理对象映射器类

java - java中数组名称的动态初始化?

php - php函数结束时是否释放内存

c# - 静态类中的静态属性