我知道一个块定义了一个变量的范围。方法中的空块用于设置作用域。但是为什么为什么方法内部的空块也要初始化变量呢?不同于循环等使用的块。
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?
}
}
我的问题是:为什么方法中的空块的属性与循环或条件块等使用的块不一样
答案 0 :(得分:2)
因为a
的该块将始终执行,因为没有封闭的运算符。但是b
是在循环内初始化的,因此编译器会看到b = 20
仅在循环内执行,并且如果未执行循环,则b
不会初始化。而且编译器不会运行您的代码来了解没有这样的代码路径,因此不会执行循环。
答案 1 :(得分:0)
答案 2 :(得分:0)
我怀疑您正在编译,而不是运行时错误。 假设b从未初始化过,因为编译器认为for循环可能不会执行。
以防万一,应始终将变量设置为默认值。