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

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?
    }
}


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

最佳答案

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

10-05 23:10