小编Ash*_*hul的帖子

为什么尝试打印未初始化的变量并不总是导致错误消息

有些人可能会发现它类似于SO问题Java Final变量是否具有默认值?但是这个答案并没有完全解决这个问题,因为这个问题并没有直接在实例初始化程序块中打印x的值.

当我尝试在实例初始化程序块内直接打印x时,问题出现了,同时在块结束之前为x分配了一个值:

情况1

class HelloWorld {

    final int x;

    {
        System.out.println(x);
        x = 7;
        System.out.println(x);    
    }

    HelloWorld() {
        System.out.println("hi");
    }

    public static void main(String[] args) {
        HelloWorld t = new HelloWorld();
    }
}
Run Code Online (Sandbox Code Playgroud)

这给出了编译时错误,指出变量x可能尚未初始化.

$ javac HelloWorld.java
HelloWorld.java:6: error: variable x might not have been initialized
        System.out.println(x);
                           ^
1 error
Run Code Online (Sandbox Code Playgroud)

案例2

我没有直接打印,而是调用一个打印功能:

class HelloWorld {

    final int x;

    {
        printX();
        x = 7;
        printX();
    }

    HelloWorld() {
        System.out.println("hi");
    }

    void printX() {
        System.out.println(x);
    }

    public static void …
Run Code Online (Sandbox Code Playgroud)

java final initialization

55
推荐指数
2
解决办法
5865
查看次数

标签 统计

final ×1

initialization ×1

java ×1