黑马程序员技术交流社区

标题: 为什么finally中的代码没执行? [打印本页]

作者: 兜兜转转    时间: 2013-8-14 09:31
标题: 为什么finally中的代码没执行?
本帖最后由 兜兜转转 于 2013-8-15 08:59 编辑

为什么在try语句中存在return语句,finally快中的代码也会执行完毕,再将方法返回,为什么我在
try语句中加了System.exit(0);语句,finally块中的语句不但没执行,而且程序直接诶退出了呢?
老师不是说,finally语句中的代码任何时候都会执行吗?求解?


作者: breaveheart    时间: 2013-8-14 09:44
System.exit(0);是直接退出程序了,自然不会执行到finally里的语句。
这个是个特殊的例子,毕老师的视频里有强调过的,
你回头看下就知道啦。
作者: 兜兜转转    时间: 2013-8-14 09:46
我没接触黑马的时候,前半部分看的是别家的视频教程,退出是退出,但是根本原因是什么呢。
作者: 杨增坤    时间: 2013-8-14 10:31
System.exit(0);是直接让程序退出,不管你程序中运行着什么,使虚拟机终止,你想一想,运行环境都终止了,下面的代码还会执行吗!
而return:知识结束了方法,但是程序没有停止,还在运行,还符合java的运行规则,finally还会执行,直到把代码运行完成。
你看看文档也就明白了!

1.png (1.74 KB, 下载次数: 12)

1.png

作者: xwf4348    时间: 2013-8-14 11:02
System.exit(0);是直接退出程序了,自然不会执行到finally里的语句。
这个是个特殊的例子,毕老师的视频里有强调过的
作者: 昨夜星风    时间: 2013-8-14 11:08
1.当运行到异常处理语句时,如果在try语句中存在return语句,那么就会return, 这时后面的语句执行不到,但
在finally块中存放的代码是一定会被执行的。
2.记住finally中定义的通常是关闭资源代码,因为资源必须释放,
    finally只有一种情况不会执行,当执行到System.exit(0);finally不会执行
    因为在执行到System.exit(0)  直接让程序退出   虚拟机运行停止,所以下面的代码都不会运行。
作者: 胡智    时间: 2013-8-14 11:37
兜兜转转 发表于 2013-8-14 09:46
我没接触黑马的时候,前半部分看的是别家的视频教程,退出是退出,但是根本原因是什么呢。 ...

打个比方:
程序运行代码就像是开个颁奖典礼,finally语句就是颁奖。无论领奖的人来不来,颁奖之前有没有什么表演,反正这个奖是要颁发出去的。
System.exit(0),就是主办方突然来句,这个典礼不搞了。那典礼都不搞了,还颁什么奖,就都回家睡觉了,finally就不执行了。
作者: l396262632    时间: 2013-8-14 11:46
基础没搞好啊
作者: 付龙    时间: 2013-8-14 13:54
既然不知道System.exit(0);语句是什么,那你为什么要加System.exit(0)呢?
作者: 兜兜转转    时间: 2013-8-14 19:29
我当然知道System.exit(0);是退出程序,但是作为新手有没有人会跟我一样纠结能不能先执行完finally中的语句再去exit呢?
作者: 吴光新    时间: 2013-8-14 20:19
如果在finally之前遇到System.exit(0);那么finally就不会被执行,可能是你听错了或者是你老师说错了,finally语句中的代码不是任何时候都会执行
作者: 封号了...    时间: 2013-8-14 20:40
我好想在哪里看到过,原因好像是即使try里面有return,JVM在执行完try里面的代码的时候不马上return而是先把返回数据存储起来,然后再运算finally{}里面的代码,即使finally改变了上面的数据,结果还是会返回return时候保存的数据,也就是finally不能改变上面的任何数据。
这个问题的关键就是:执行顺序跟System.exit(0);语意的问题。
顺序是try return(保存顺序,先不返回),执行finally代码块中的代码,在执行return。
而System.exit(0);的意思是直接退出虚拟机,所以虚拟机根本不会继续向下面执行了,如果这个方法有返回值,并且主函数里面还有后续代码需要运行的话,都不会执行了,所以这个没多大意义。






求分!!!!

作者: 张俊生    时间: 2013-8-14 22:24
如果问题已解决请改成已解决,谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2