变量未在try catch块`finally`中初始化

for*_*ill 4 java syntax compiler-errors

为什么编译器不能理解变量是在块trycatch块中初始化而在块中抱怨finally

int i;
try {
    i = 0;
}
catch (Exception e) {
    i = 2;
}
finally {
    System.out(i);
}
Run Code Online (Sandbox Code Playgroud)

Kon*_*kov 5

如果初始化语句(i = 0;)失败,那么程序将继续使用该finally块,其中该变量仍将被取消初始化,这就是您遇到编译时错误的原因.