关于try语句的执行顺序

莫名其 2011-08-26 11:16:37
假如try{}里有一条return语句,finally里的语句会在return前执行还是会在return后执行?

请勿只回复一个“前”或者“后”,请给出理由。

在线等,答案确定立刻结帖。
...全文
462 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
thislovebyyou 2011-10-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 q384264619 的回复:]
可以肯的告诉你是在return 前执行!!
[/Quote]
不知道你为什么那么肯定,我觉得你是连楼主问题都没看清楚就回答了!
caipan1234567 2011-08-26
  • 打赏
  • 举报
回复
会在return 之前执行finally ,如果,不在之前,那return 过去了,那finally里面的就没有执行了
五哥 2011-08-26
  • 打赏
  • 举报
回复
假如try{}里有一条return语句,finally里的语句会在return前执行还是会在return后执行?


在return 前啊 ,finally里面的语句肯定要执行的
newtypebao 2011-08-26
  • 打赏
  • 举报
回复
应该是return 之前会finally一下吧
q384264619 2011-08-26
  • 打赏
  • 举报
回复
可以肯的告诉你是在return 前执行!!
woodenhouse 2011-08-26
  • 打赏
  • 举报
回复
finally语句里的return不会执行 try块里的语句会等到finally语句执行完后才执行
heweiAndPippo 2011-08-26
  • 打赏
  • 举报
回复
这样的问题没有什么实际意义,有经验的程序员是不会写这样的代码的。
一般都是面试题上有这样的问题。
失落的code 2011-08-26
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 jorln 的回复:]

那么三楼的结果就是在return后执行了?
[/Quote]
话说其实这也看不出来怎么谁先执行的,又测试了一下,如果没有try的话那么程序遇到return,会直接跳到main结束的花括号处,但是在try中遇到return的话不会直接跳到最后的花括号,而是先执行finally,所以推断出,finally应该早于return执行。
莫名其 2011-08-26
  • 打赏
  • 举报
回复
谢谢诸位,临时有事出去下,晚上回来结帖
莫名其 2011-08-26
  • 打赏
  • 举报
回复
那么三楼的结果就是在return后执行了?
gukuitian 2011-08-26
  • 打赏
  • 举报
回复
实在是没什么理由。就像1楼说的,人家制定好的规则,我们在用而已

try里的return会先执行;
然后执行finally里的return。他会覆盖掉之前的值。最后返回的就是finally里的。
失落的code 2011-08-26
  • 打赏
  • 举报
回复
为方便上一个C#的:

static void Main(string[] args)
{
try
{
Console.WriteLine("executed in try");
return;
}
finally
{
Console.WriteLine("executed in finally");
}
Console.WriteLine("test over!");
}

result:
executed in try
executed in finally
完美灬缺陷 2011-08-26
  • 打赏
  • 举报
回复
finally不管在什么情况之下都会执行,执行的时间是在程序return 之前.
zidasine 2011-08-26
  • 打赏
  • 举报
回复
理由就是 谁制定了这个规则去问谁

现在应该去问oracle了
GIS__ 2011-08-26
  • 打赏
  • 举报
回复
try{
return 1
}catch(Exception e){
return 2
}finally{
return 3
}
最终返回的是3

如果finally里面没有return,无异常返回1,有异常返回1
xb_feng 2011-08-26
  • 打赏
  • 举报
回复
finally块中的内容在控制转出try块前执行。

return语句是转出try块的一个方式,所以在return前会执行finally块
阳明 to life 2011-08-26
  • 打赏
  • 举报
回复
修改15楼例子说下
  public static int test2()
{
int a=0;
try
{
return a++;
}
finally
{
return ++a;
}
}

执行了try的a之后,会跳到finally执行++a,然后跳到try的a++然后到finally返回
看字节码可以证明前面的几句话,最后说到finally返回可以参考下面的代码
public static int test()
{
int a = 0;
int b = 0;
try{
return b;
}finally
{
return ++a;
}
}
muyipan 2011-08-26
  • 打赏
  • 举报
回复
简单的说 就是一个try 里面 无论什么情况 finally都会执行一次!
  • 打赏
  • 举报
回复

规定是这样就是这样啦。。。
  • 打赏
  • 举报
回复

public class Catch {
public static int test() {
int a = 0;
try {
System.out.println("try:"+a);
return a;
} finally {
System.out.println("finally:"+a);
}
}

public static void main(String args[]) {
System.out.println(test());
}

}


try:0
finally:0
0
加载更多回复(10)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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