黑马程序员技术交流社区
标题:
finally问题
[打印本页]
作者:
李道福
时间:
2013-9-9 20:03
标题:
finally问题
本帖最后由 李道福 于 2013-9-9 21:20 编辑
<p>public class Finally{
public static void main(String[] args){
System.out.println(test());
}
public static String test(){
try{
System.out .println("try block");
return test1 ();
} finally {
System.out .println("finally block");
}
}
public static String test1(){
System.out .println("return statement");
return "after return";
}
}</p><p>越看越糊涂了,刚看到一个资料说finally语句中的代码会在return语句之前执行,但这个程序的执行结果却是</p><p>try block
return statement
finally block
after return</p><p>如果finally在return语句之前执行,那结果应该是</p><p>try block</p><p>finally block
return statement
after return</p><p>如果是在return之后执行,那结果应该是</p><p>try block
return statement
after return</p><p>finally block</p><p>有那位大神知道这是怎么回事嘛?finally到底是在什么时候才会执行?</p>
复制代码
作者:
yangjie
时间:
2013-9-9 20:22
我以前好像回答过类似的问题但是帖子找不到了,再说一下
通常读到return的时候:1.先运算return之后的表达式取得要返回的值(你这里是test1 ()) 2.结束所在的函数并把值返回调用处。
finally语句实际是在1和2之间执行的,return语句会先运算return之后的表达式,取得要返回的值。把这个值先临时保存,然后去调用finally里的语句。等finally执行完了,才会结束整个函数并把临时保存的值返回调用处。
作者:
昝文萌
时间:
2013-9-9 20:26
首先要明确两点:
1、return 语句并不是立即返回,它本质上将设置返回结果和执行返回过程是分开处理的:首先它做了一个动作,将待返回的数据存入返回变量中。
2、如果在try catch语句中,try中有return语句,则finally块中的语句先于return语句(这里指的是设置返回结果)执行。
运行到return test1 ()时,会执行test1()里面的两条语句,第一条是打印"return statement",第二条语句是 return "after return"执行完之后,会把"after return"储存起来并不立即返回,而是执行finally语句打印"finally block",然后执行return语句把"after return"语句返回并打印出来!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2