try中有return 和finally哪个先执行

Luger 2012-09-23 09:52:33
package me.luger.base;

public class FinallyReturnTest {
public static void main(String[] args) {
tt();
}

// finally中的代码是必须要执行的,而且是在return前执行,除非碰到exit()。
static Return tt() {
try {
return new Return("try");
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println("finally");
}
return new Return("outter");
}

}

class Return {
Return(String name) {
System.out.println("return " + name);
}
}


我在网上看的说是finally在return前执行 但是按我这么写的话是return先执行呀?是不是我理解错了
...全文
1230 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
finally最后执行,即使你先return了
[/Quote]
+1
Luger 2012-09-23
  • 打赏
  • 举报
回复
上面程序输出的是
return try
finally
copaer 2012-09-23
  • 打赏
  • 举报
回复
函数遇到return,就已经返回了,但是返回的值保存在内存之中,所有要等整个函数执行完之后函数才真正的返回。看下面:

public class Test {

/**
* @param args
*/
public static void main(String[] args) {
System.out.println(getString());

}
static String getString(){
try{
return "SUCCESS";
}catch(Exception e){

}finally{
System.out.println("Finally is executing");
return "ERROR";//如果这句放在finally之外呢?
}

}
}

控制台打印的是:
Finally executing
ERROR
当函数执行finally时,返回的"ERROR"覆盖了前面的"SUCCESS",但是如果将return "ERROR"
移到finally之外,那么函数最后返回的也就是"SUCCESS"了。相应的,控制台打印的也就是:
Finally executing
SUCCESS
ZZZ5512536 2012-09-23
  • 打赏
  • 举报
回复
finally最后执行,即使你先return了

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧