2014-10-17 54 views

回答

2

如果在初始化之前在catch块中打印变量'i',它会给出错误,因为编译器认为可能在'i'在try块中被设置之前抛出异常,在这种情况下'i'不会被初始化终于在这里也就是这种情况,也就是说,当你在finally块中编译'i'时,编译器认为'i'被设置在catch块之前可能会抛出异常,在这种情况下'i'不会被初始化'

编译器不知道该变量是在try或catch块中初始化的。编译器抱怨,因为应该同时声明和初始化局部变量,但是你已经声明了它。如果你在任何一个block中使用它(try,catch,finally),没有初始化编译器就会抱怨它。试试看:

int i; 
    try { 
     System.out.println(i); 
     //i = 0; 
    } 
    catch (Exception e) { 
     System.out.println(i); 
     //i = 2; 
    } 
    finally { 
     System.out.println(i); 
    } 
5

如果初始化语句(i = 0;)失败,那么该计划将继续与finally块,其中变量仍然是未初始化的,这就是为什么你会得到一个编译时错误。

+0

OMG面掌客当然'需要你为什么说finally块将捕捉之前预制要在'catch' – forcewill 2014-10-17 13:59:03

+0

之前执行finally'? http://stackoverflow.com/questions/3109353/what-c​​omes-first-finally-or-catch-block – Ian2thedv 2014-10-17 14:08:22

+0

@ Ian2thedv,谢谢。你是对的。我的错误 – 2014-10-17 14:09:30

2

编译器将无法知道i是否会被初始化。它可能因任何原因失败,因此finally块可能无法工作。