为什么catch块会在Java中初始化变量时出错

giz*_*gok 9 java

这是我写的代码.

int num;
try {
    num=100;
    DoSomething();
    System.out.println(num);
} catch(Exception e) {
    DoSomething1();
} finally{
    DoSomething2();
}
System.out.println(num); // Error Line
Run Code Online (Sandbox Code Playgroud)

我在我提到的错误行上收到错误'本地变量num可能尚未初始化'.在移除catch块时,错误消失.这有什么不对?我做错了吗?

Dav*_*d M 11

如果try块中抛出异常,则该变量num可能确实未初始化.如果包含catch块,则执行可以继续执行错误行,因此编译器会报告您说明的错误.

如果你删除了catch块,那么执行只会在没有异常的情况下到达"错误行",在这种情况下,变量将在内部初始化try.

(我假设你已经知道在使用它们之前需要初始化局部变量,并且专注于你在catch块中注意到的行为......)

  • @ david -m"如果你的`try`块中抛出一个异常,那么变量`num`可能确实没有被初始化." 怎么样?赋值是try块中的第一个语句,因此`num`不可能被初始化.只是编译器不知道这个事实. (3认同)