黑马程序员技术交流社区
标题: 今天课上讲的面试题4 [打印本页]
作者: 玉遥 时间: 2014-7-12 23:03
标题: 今天课上讲的面试题4
A:在catch里面有return的情况下,finally里面的代码还执行吗?如果执行,请问在return前还是后。
会,在return中间。
B: 请输出下列程序的结果
public class FinallyTest {
public static void main(String[] args) {
System.out.println(method2());
}
private static int method2() {
int x = 10;
try {
System.out.println(x / 0);
x = 20;
} catch (ArithmeticException e) {
x = 30;
return x;
} finally {
x = 40;
}
return x;
}
//结果30。
怎么理解呢?
第一次执行到return x;的时候,在内存中已经形成了一个返回路径,这次记录的值:return 30;
接着,finally执行,x=40。
最后,第二次执行return的时候,就直接返回了return 30
作者: 葛生辉 时间: 2014-7-13 13:04
A catch里面有return的情况下,finally里面的代码还执行吗
执行 因为trturn是结束函数功能 而finally是一定会执行的
B 首先 x 是个局部变量 有生命周期的
因为发生了异常 执行catch teturn x返回30 此时 x已经压栈了
由于还没执行到调用输出语句 x 还有生命
在执行finally x = 40 ; x 生命结束; 返回先压栈的30
所以打印 x = 30;
注意 最后一个return 是不会执行到的 应为上一个return已经 结束了函数
如果把System.out.println(x / 2); 修改
catch 不会执行
最后一个return 会返回 40
希望对你有帮助!!!!!
作者: 黄梁梦想享 时间: 2014-7-13 14:10
对我也有帮助,谢谢
作者: 導ぷ仙″兲蕐 时间: 2014-7-13 14:31
多谢 很有帮助!
作者: 吾凡庸 时间: 2014-7-13 15:00
有帮助;
作者: 文盲庄稼汉 时间: 2014-7-13 18:29
多谢多谢。学到了
作者: Caincxy 时间: 2014-7-13 18:44
又学习了
作者: caiyaoren 时间: 2014-7-13 18:45
30
作者: 001可望成功 时间: 2014-7-13 18:50
刚刚写了一个这方面的贴了
http://bbs.itheima.com/thread-129360-1-1.html
作者: 止询初衷 时间: 2014-7-13 19:28
在catch里面写System.exit(0);系统退出,finally后的就不在执行了
作者: 孙妍娜 时间: 2014-7-13 20:46
受教了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |