为 Java 中的静态 final 变量分配值\n


在 Java 中,非静态 final 变量可以在两个地方赋值。

  • 声明时。

  • 在构造函数中。

示例

实时演示

public class Tester {
   final int A;
   //Scenario 1: assignment at time of declaration
   final int B = 2;

   public Tester() {
      //Scenario 2: assignment in constructor
      A = 1;
   }

   public void display() {
      System.out.println(A + ", " + B);
   }

   public static void main(String[] args) {        
      Tester tester = new Tester();
      tester.display();
   }
}

输出

1, 2

但是在静态 final 的情况下,变量不能在构造函数中赋值。编译器会抛出一个编译错误。静态 final 变量需要在静态代码块或声明时赋值。所以静态 final 变量可以在以下两个地方赋值。

  • 声明时。

  • 在静态代码块中。

示例

实时演示

public class Tester {
   final int A;
   //Scenario 1: assignment at time of declaration
   final int B = 2;

   public Tester() {
      //Scenario 2: assignment in constructor
      A = 1;
   }

   public void display() {
      System.out.println(A + ", " + B);
   }

   public static void main(String[] args) {        
      Tester tester = new Tester();
      tester.display();
   }
}

输出

1, 2

静态 final 变量有此行为的原因很简单。静态 final 在所有对象之间共享,如果允许在构造函数中赋值,那么在创建对象时,此变量将按对象进行更改,因此不会一次性赋值。

更新于: 2020 年 6 月 18 日

804 次访问

开启您的 职业

完成本课程,获得认证

开始
广告
© . All rights reserved.