我知道 block 定义了变量的范围。方法内的空 block 用于设置范围。但是为什么方法内部的空 block 初始化变量也与循环等使用的 block 不同。
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?
}
}
我的问题是:为什么方法内的空 block 的属性与循环或条件 block 等使用的 block 不相似
最佳答案
因为 a
的 block 无论如何都会被执行,因为没有封闭的运算符。但是 b
是在循环内部初始化的,因此编译器认为 b = 20
仅在循环内部执行,如果循环未执行,则 b
未初始化。并且编译器不会运行您的代码来了解不存在不执行循环的代码路径。
关于方法内的Java空 block 与其他 block 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52652117/