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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄方 中级黑马   /  2012-3-11 22:57  /  7103 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

6 个回复

倒序浏览
finally {}里面的语句是一定会执行的,在try里面的语句执行完以后,就执行finally {}.所以finally {}里面都放着无论如何都要执行的语句

点评

当执行到System.exit(0);fianlly不会执行。  发表于 2012-3-12 06:43
当执行到System.exit(0);fianlly不会执行。  发表于 2012-3-12 06:42
回复 使用道具 举报
无论return语句是否执行,finally {}中的语句肯定要执行一次的,如果return语句也会执行的话,那样他会在finally之前,顾名思义finally语句是在最后执行的
回复 使用道具 举报
finally{}里边的内容是一定要执行的,可以理解为是,try{}中retrun前边的语句先执行完,然后执行finally{}中的语句,最后执行try{}中的retrun语句。如果出现try{retrun;}
finally{retrun;}时,可以理解是先执行try{}中retrun前边的语句,然后执行finally{}中的语句,但是由于finally{}中有retrun语句,那么try{}内的retrun语句将不再执行

点评

当执行到System.exit(0);fianlly不会执行。  发表于 2012-3-12 06:43
回复 使用道具 举报
这个得分情况:
1,当try块中存在System.exit(0);语句的时候,会使得当前线程中断执行,其实就是java虚拟机进程会结束,java虚拟机退出系统,当然就不会执行finally块中的语句了。
2,如果try块中有return语句,没有System.exit(0);,在return语句返回值之前,线程会去寻找方法中是否有finally块,有的话则在执行完finally块中的语句之后,再返回try中执行return并返回值给方法。还有一种情况是,如果finally块中也存在return语句,那么这个return语句会直接使得方法结束并返回值给方法,而不会回到try中去执行那个return语句。
这个具体在《疯狂java 突破程序员基本功的16课》这本书中有讲到,恰好最近看过那本书,希望对你有用。
回复 使用道具 举报
会执行 而且在  return 前执行    如果在  catch   中加入  System.exit(0);    finally中的语句不会执行。直接返回,退出程序
回复 使用道具 举报
都只是试验得出的结果,具体到底是怎样的机制,搞不清楚,记住那几道经典面试题就OK了,会用就行,打算问问淘宝的一个专家去....
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马