问题:
如果try{...}cahtch(Exception) {...}finally{...}中catch中有return语句,finally里的代码会执行吗?如果会,请问是在return前还是return之后?
答:会执行,在return之前执行。
例子:下边的例子输出几?
public class FinallyDemo {
public static void main(String[] args) {
System.out.println(getInt());
}
private static int getInt() {
int a = 10;
try {
System.out.println( a / 0);
a = 20;
} catch (ArithmeticException e) {
a = 30;
return a;
} finally {
a = 40;
}
return a;
}
}
正确答案:30;
解答:try中a / 0,因为除数不能为0,执行到try中第一句时,抛出ArithmeticException异常,进入catch语句。然后执行a = 30;执行到return a语句时,返回路径已经形成,其实真正执行的语句为:return 30。但是此时JVM发现后边还有finally语句,所以继续执行finally中语句:a = 40;执行完后再次回到以前的返回路径,继续return 30;但是如果finally中有return语句,既不会继续执行return 30了。