为什么在try块内初始化varable在外部不持久


public class Test {
public static void main(String[] args) {

int a;
// for( a=0; a<5; a++ ){}
try {
a=10;
} catch (Exception e) {
//TODO: handle exception
}
System.out.println(a);
}
}

在上面的代码中,for循环对vara的初始化在打印时会持续,但try块不会。

java编译器不知道try块中会发生什么。

try/catch的全部意义在于:有些代码可能执行得很好,也可能不执行。因此,不能保证在try块内分配给a,因此以下对a读取访问可能会发现它(仍然)未初始化。

真正的答案是:在很多情况下,人类读者都可以看到"这里没有问题";。但是java编译器无法识别这种特殊情况。当然,可以编写一个编译器来检测";a被分配了一个值,并且该代码永远不会抛出异常";。但是java编译器并不是这样写的。这就是一切。

最新更新