《Java 2实用教程》P137 “如果成员变量或局部变量被修饰为final,那么那就是常量。由于常量在运行期间不允许再发生变化,所以常量在声明时没有默认值,这就要求程序在声明常量时必须指定该常量的值。”
看了这里,导致我以为final常量必须要在声明的同时赋值,例如final int a = 1
。
查询资料后发现,final常量的赋值有3种方式:直接赋值,构造方法赋值,初始化块(代码块)赋值。
class FinalTest {
// 直接赋值
final int a = 1;
final double b;
final String c;
// 初始化块(代码块)赋值
{
b = 2;
}
// 构造方法赋值
FinalTest() {
c = "FinalTest";
}
}
public class T66 {
public static void main(String[] args) {
FinalTest ft = new FinalTest();
System.out.println(ft.a);
System.out.println(ft.b);
System.out.println(ft.c);
}
}
书里好像并没有提到“初始化块(代码块)”这个概念,所以这里补充一下。