在Java中为静态最终变量赋值

在Java中,可以在两个位置为非静态最终变量分配一个值。

  • 在申报时。

  • 在构造函数中。

示例

public class Tester {
   final int A;
   //方案1:在声明时分配
   final int B = 2;

   public Tester() {
      //方案2:在构造函数中分配
      A = 1;
   }

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

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

输出结果

1, 2

但是,如果是static final,则不能在构造函数中分配变量。编译器将引发编译错误。需要在静态块中或在声明时分配静态最终变量。因此,可以在以下两个位置为静态最终变量分配一个值。

  • 在申报时。

  • 在静态块中。

示例

public class Tester {
   final int A;
   //方案1:在声明时分配
   final int B = 2;

   public Tester() {
      //方案2:在构造函数中分配
      A = 1;
   }

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

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

输出结果

1, 2

静态最终变量的这种行为背后的原因很简单。静态最终值在对象之间是通用的,如果允许在构造函数中分配静态最终值,则在创建对象期间,此变量会针对每个对象而更改,因此不会分配一次。