try....catch...finally

yzj123 2010-02-28 09:57:20
题目:try{}里有一个return 语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候执行,在return前还是return后?
多谢各位!
...全文
113 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
andy2u 2010-03-01
  • 打赏
  • 举报
回复
楼主的表达有点歧义。finally代码块如果在return语句前都会被执行。反之如果执行了return语句,就不会执行finally代码块
andy2u 2010-03-01
  • 打赏
  • 举报
回复
引用 6 楼 bigbird2012 的回复:
异常处理的运行过程:
(1) finally语句唯一不被执行的情况是先执行用于终止程序的System.exit()方法。java.lang.System类的静态方法
exit()用于终止当前的java虚拟机进程,java虚拟机所执行的java程序也随之终止
(2) return语句用于退出本方法。在执行try或catch中的return语句时,假如有finally代码块,会先执行finally代码块。
(3) finally代码块虽然在return语句之前被执行,但finally代码块不能用重新给变量赋值的方式
来改变return语句的返回值
(4) 建议不要在finally代码块中使用return语句,因为它会导致两种潜在的错误:
第一种错误是覆盖try或者catch代码块中的return语句
第二种错误时丢失异常



说得不错,完全赞同
NickCheng 2010-03-01
  • 打赏
  • 举报
回复
面试题也经常出这样的问题哦!
  • 打赏
  • 举报
回复
会,在return之前执行,面试题总考这个。
NickCheng 2010-03-01
  • 打赏
  • 举报
回复
引用 2 楼 sotom 的回复:
额,会执行 ,在return前执行。。。。。。

没错 会在return前执行
SambaGao 2010-03-01
  • 打赏
  • 举报
回复

package com.gjhohj.test;

import java.util.ArrayList;
import java.util.List;

public class TestMain01 {

public static void main(String args[]) {

System.out.println(noticeFinally());
}

public static String noticeFinally(){
try{
return "1";
}finally{
System.out.println("abc") ;

}
}

}



结果是
abc
1

package com.gjhohj.test;

import java.util.ArrayList;
import java.util.List;

public class TestMain01 {

public static void main(String args[]) {

System.out.println(noticeFinally());
}

public static boolean noticeFinally(){
try{
return true;
}finally{
return false ;

}
}

}



结果就是false
孤独剑客 2010-03-01
  • 打赏
  • 举报
回复
finally 里面的代码是一定会执行的, 但是会在return之前执行.
zyus1987 2010-03-01
  • 打赏
  • 举报
回复
一般废材,先自己测试再说不行吗?误人子弟~!
哦~~!非常赞同6L的说话up一下~
samihyypia 2010-03-01
  • 打赏
  • 举报
回复
写了小例子debug试试
sotom 2010-03-01
  • 打赏
  • 举报
回复
如果 有 System.exist() 就不会执行finally
JavaAlpha 2010-02-28
  • 打赏
  • 举报
回复
finally 里面的代码不管怎么样都是会被执行的。 
Java codepublic static void main(String[] args)
{
System.out.println(test());
}
public static int test()
{
try
{
System.out.println(2/1);
return 0;
} catch (Exception e)
{
e.printStackTrace();
}finally
{
System.out.println("2/0");
}
return 0;
}
结果:
2
2/0
0


先执行 try里面的输出
然后执行 finally里面的输出
最后才返回的
monilong 2010-02-28
  • 打赏
  • 举报
回复
up6楼的
正解
YouLoveApple 2010-02-28
  • 打赏
  • 举报
回复
好像把return换成system.exit(int)的话,finally就不会被执行了。
huangdh12 2010-02-28
  • 打赏
  • 举报
回复
return之前之行。
BigBird2012 2010-02-28
  • 打赏
  • 举报
回复
异常处理的运行过程:
(1) finally语句唯一不被执行的情况是先执行用于终止程序的System.exit()方法。java.lang.System类的静态方法
exit()用于终止当前的java虚拟机进程,java虚拟机所执行的java程序也随之终止
(2) return语句用于退出本方法。在执行try或catch中的return语句时,假如有finally代码块,会先执行finally代码块。
(3) finally代码块虽然在return语句之前被执行,但finally代码块不能用重新给变量赋值的方式
来改变return语句的返回值
(4) 建议不要在finally代码块中使用return语句,因为它会导致两种潜在的错误:
第一种错误是覆盖try或者catch代码块中的return语句
第二种错误时丢失异常
bbb332 2010-02-28
  • 打赏
  • 举报
回复
会执行,在return前
貌似是个笔试题。。。。
dinghun8leech 2010-02-28
  • 打赏
  • 举报
回复
楼主把产生疑问的这段代码执行一下就知道了,加几个控制台输出。
finally里的代码在try里出不出异常的情况下都会执行,并且在return前。
借我那把枪吧 2010-02-28
  • 打赏
  • 举报
回复
无论如何,Finally{}都会被执行,神奇吧
当然是在return前了,不然不就不执行了吗
主要是来接分的,要记得把分给我啊
sotom 2010-02-28
  • 打赏
  • 举报
回复
额,会执行 ,在return前执行。。。。。。
sotom 2010-02-28
  • 打赏
  • 举报
回复
不会被执行。

62,615

社区成员

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

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