如何在不使用文字的情况下定义常量?

时间:2015-05-26 21:17:28

标签: java constants final literals

我很难理解如何在不使用文字的情况下定义常量。 final int A = 1 + 1是否计算?

4 个答案:

答案 0 :(得分:4)

Java语言规范定义Constant Expressions。第一项是“原始类型的文字和字符串类型的文字”,因此这些文字也是常量。同样,它列出了“引用常量变量的简单名称(§6.5.6.1)”。但是,还有许多其他形式的表达式仅使用某些运算符组成,这些运算符也被定义为常量表达式。有关完整规则,请参阅链接部分。

答案 1 :(得分:1)

常量是一个不会改变的值:

int getRandomNumber() {
    //chosen by a fair dice roll, guaranteed to be random
    return 4; //<- literal
}

public final int random = getRandomNumber(); //<- constant

<子> XKCD 221

此处random不是文字,因为它是方法调用的结果。但是,它是一个常量,因为它被声明为final

Java的文字数量有限:

String a = "a"; // string literal
int three = 3; // number literal
int[] manyThree = {3,3,3}; //an array literal consisting of number literals

任何变量都可以通过声明final来保持常量。

答案 2 :(得分:1)

好吧,你可以轻松拥有一个非文字常量。拿这个:

public class A {
    public static final int A_CONSTANT = new java.util.Random().nextInt();
}

A.A_CONSTANT肯定是常量 - 它是finalstatic,所以一旦加载了这个类,它就不会改变!但是,它不是文字 - 它在运行时是常量,而不是编译时。每次加载A时,A_CONSTANT都会有一个新的常量值,而文字4总是恰好为4。

答案 3 :(得分:0)

文字不是常量,它是常数。 (不带a)常量是可以用文字表示的值的名称。 (或另一个常数)