首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

finally里的话语一定会执行吗

2012-09-13 
finally里的语句一定会执行吗?前几天去面试,其中有两道面试题。如下?一:finally里的语句一定会执行吗??二:

finally里的语句一定会执行吗?

前几天去面试,其中有两道面试题。如下

?

一:finally里的语句一定会执行吗?

?

二:有如下形式的语句

try{return 5;}catch(Exception e){e.printStackTrace();}finally{System.out.println("会执行嘛?");}

??这样的代码块放在一个方法里,finally里的语句还会执行吗?如果会是在return语句之前执行还是之后执行?

?

我当时知道finally里的语句是一定会执行的,可是如果按照代码的执行顺序似乎应该return语句先执行,可是一执行return语句这个方法就会结束,所以我答曰:finally里的语句在return之前执行。

?

回去之后做了一个测试

public class ReturnTest {public static int testFinal(){try{        return 5;}catch(Exception e){       e.printStackTrace();}finally{       System.out.println("会执行嘛?");}return 0;}public static void main(String args[]){System.out.println(testFinal());}}

最后输出:

会执行嘛?
5

这样可以发现finally里的语句是会先执行的

?

Debug后发现的情况是:先执行finally;在执行return 5;语句,最终没有执行return 0;因为return 5的时候方法已经结束了,可是没有return 0;这条语句会报错。该如何解释?不解啊

?

网上资料: http://topic.csdn.net/u/20090521/13/4465dec0-4c2e-4ed3-a93f-5b661cd8268b.html

参考一:

?

在 try 中 或 catch 中遇到 return 就会转入 finally

?参考二:

?

根据java规范:在try-catch-finally中,如果try-finally或者catch-finally中都有return,则两个return语句都执行并且最终
返回到调用者那里的是finally中return的值;而如果finally中没有return,则理所当然的返回的是try或者catch中return的值,但是
finally中的代码是必须要执行的,而且是在return前执行,除非碰到exit()。

热点排行