Java中的空块与其他块不同吗?

时间:2018-10-04 17:07:16

标签: java core object-initializers empty-list

我知道一个块定义了一个变量的范围。方法中的空块用于设置作用域。但是为什么为什么方法内部的空块也要初始化变量呢?不同于循环等使用的块。

class A{
    public static void main(String args[]){
        int a;
        int b:
        {
            a = 10;
        }
        for(int i = 0; i < 1; i++){
            b = 20;
        }
        System.out.println(b); //error here
        System.out.println(a);
        // doesnt give error and prints 10. why?
    }
}

我的问题是:为什么方法中的空块的属性与循环或条件块等使用的块不一样

3 个答案:

答案 0 :(得分:2)

因为a的该块将始终执行,因为没有封闭的运算符。但是b是在循环内初始化的,因此编译器会看到b = 20仅在循环内执行,并且如果未执行循环,则b不会初始化。而且编译器不会运行您的代码来了解没有这样的代码路径,因此不会执行循环。

答案 1 :(得分:0)

执行顺序。

在此处查看文章:

Order of Execution

答案 2 :(得分:0)

我怀疑您正在编译,而不是运行时错误。 假设b从未初始化过,因为编译器认为for循环可能不会执行。

以防万一,应始终将变量设置为默认值。

相关问题