【问题标题】:How can a constant be defined without using a literal?如何在不使用文字的情况下定义常量?
【发布时间】:2015-05-26 21:17:27
【问题描述】:

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

【问题讨论】:

  • “常数”是什么意思?
  • 请在 java 中举例说明您的问题。
  • (3+2) 也是一个常量,但不是文字;它也不会在运行时进行评估。
  • 你能举一个例子说明如何在运行时创建一个常量,你能解释一下你的意思吗?
  • @OP 如果您不喜欢人们对您的问题的投票方式,请对其进行编辑以改进它,而不是破坏本网站。

标签: java constants final literals


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    嗯,你可以很容易地拥有一个非字面常量。拿这个:

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

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

    【讨论】:

      【解决方案3】:

      常量是不变的值:

      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 来成为常量。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2011-03-23
          • 1970-01-01
          • 1970-01-01
          • 2012-02-13
          • 2020-11-20
          • 2018-09-16
          • 1970-01-01
          • 2011-10-19
          • 2021-10-17
          相关资源
          最近更新 更多