我知道块定义了变量的范围。方法中的空块用于设置作用域。但是为什么在方法内部的空块也要初始化变量,这与循环等中使用的块不同呢?
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
。而且,编译器不会运行您的代码来了解没有这样的代码路径,因此不会执行循环。