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