《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);
    }

}

书里好像并没有提到“初始化块(代码块)”这个概念,所以这里补充一下。

java中的代码块(初始化块)

Java中普通代码块,构造代码块,静态代码块区别及代码示例

最后修改:2022 年 03 月 21 日
如果觉得我的文章对你有用,请随意赞赏