黑马程序员技术交流社区

标题: 面试题,异常finally [打印本页]

作者: cxy374100657    时间: 2016-3-25 23:48
标题: 面试题,异常finally
如果catch中有return,finally里边的代码一定会执行吗?如果会,只在return之前,还是return后?
作者: dbymzss    时间: 2016-3-25 23:55
会的...在return之前执行,,,
作者: aomingchao    时间: 2016-3-26 00:15
程序遇到return 就不会再执行下面的代码啦!!
作者: y569489124    时间: 2016-3-26 08:28
一定会执行, 在之前 或者说之间..
作者: 305450674    时间: 2016-3-26 08:44
finally内的代码只有在jvm退出的时候不执行,所以只要jvm没退出就一定会执行,但是return已经建立了返回路径,虽然要执行finally里面的代码,但是并不会影响输出的结果
作者: 梦→拼搏    时间: 2016-3-26 10:00
会的  ...
作者: as9600    时间: 2016-3-26 11:10
一定执行且在return之前
作者: adomwon    时间: 2016-3-26 12:32
正确的解释:
return先去执行,建立返回路径,然后再去执行finally的代码,最后return再彻底返回.
通俗来说,finally是return的最后一口气,return先把生前该办的事给办了(将return的语句体打包,建立好返回路径),然后再看看有没有什么遗愿(看有没有finally的语句体,有的话就执行),最后再彻底挂掉;
值得注意的是,比如return里的语句体是int x = 10;finally里的语句体是int x = 20;那么返回路径里x的返回值是10;这段代码执行完毕后,x的值为20,而方法已经返回,这个已经拿不到了,所以在finally里进行赋值是没有意义的,一般是用来关流释放资源
作者: wangze    时间: 2016-3-29 11:10
会执行,是在return之前执行的。
作者: hydra    时间: 2016-3-29 11:23
在return之前执行
作者: dxw    时间: 2016-3-29 11:57
不错,学习了




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