A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 兜兜转转 中级黑马   /  2013-8-14 09:31  /  3095 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 兜兜转转 于 2013-8-15 08:59 编辑

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

评分

参与人数 1黑马币 +1 收起 理由
薛鹏鹏 + 1

查看全部评分

12 个回复

倒序浏览
System.exit(0);是直接退出程序了,自然不会执行到finally里的语句。
这个是个特殊的例子,毕老师的视频里有强调过的,
你回头看下就知道啦。

评分

参与人数 1技术分 +1 收起 理由
张俊生 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
我没接触黑马的时候,前半部分看的是别家的视频教程,退出是退出,但是根本原因是什么呢。
回复 使用道具 举报
System.exit(0);是直接让程序退出,不管你程序中运行着什么,使虚拟机终止,你想一想,运行环境都终止了,下面的代码还会执行吗!
而return:知识结束了方法,但是程序没有停止,还在运行,还符合java的运行规则,finally还会执行,直到把代码运行完成。
你看看文档也就明白了!

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

1.png

评分

参与人数 1技术分 +1 收起 理由
张俊生 + 1

查看全部评分

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

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






求分!!!!
回复 使用道具 举报
如果问题已解决请改成已解决,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马