A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 七弦 中级黑马   /  2014-6-5 13:44  /  2049 人查看  /  12 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



try {}里有一个return语句,跟在这个try后的finally {}里的code什么时候会被执行,
在return前还是后?




最好写出证明。

12 个回复

倒序浏览
有人说在return前执行,也有人说在return后执行,到底是哪个???
回复 使用道具 举报 1 0
根据具体的代码来判断,有代码吗?
回复 使用道具 举报 1 0
一定会被执行的,finally{}语句除了System.exit(0)可以终止,其他情况都会执行,
什么时候执行就是跟在代码里的位置有关,主函数不是至上而下执行的吗??看一下就知道了
回复 使用道具 举报 1 0
finally会先执行,try里面遇到return的时候会自动跳转到finally里面,finally执行了才会执行return
回复 使用道具 举报
肥洋洋 发表于 2014-6-5 15:45
finally会先执行,try里面遇到return的时候会自动跳转到finally里面,finally执行了才会执行return ...

写出代码验证啊!
回复 使用道具 举报
EDDY_Liang 发表于 2014-6-5 15:16
一定会被执行的,finally{}语句除了System.exit(0)可以终止,其他情况都会执行,
什么时候执行就是跟在 ...

这个和System.exit(0)没什么关系吧?执行是一定会的,关键是先后顺序!
回复 使用道具 举报
这个   我也不知道
回复 使用道具 举报
finally先执行
回复 使用道具 举报
  1. class Test8
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 System.out.println(tryCatch());
  6.         }
  7.         public static char tryCatch()
  8.         {
  9.                 try
  10.                 {
  11.                    int b=5/1;
  12.                    Thread.sleep(2000);
  13.                   
  14.                    System.out.println("try");
  15.                   return 't';
  16.                 }
  17.                 catch(ArithmeticException e){
  18.                  System.out.println("除零错误!");
  19.                 }
  20.                 catch(InterruptedException e){
  21.                  System.out.println("延时错误!");
  22.                 }
  23.                  finally
  24.                 {
  25.                          System.out.println("finally");
  26.                 }               
  27.                 return 'f';
  28.         }
  29. }
复制代码

执行结果:
try
catch
t
即先执行finally再执行return

try { //执行的代码,其中可能有异常。一旦发现异常,则立即跳到catch执行。
                否则不会执行catch里面的内容 }
catch { //除非try里面执行代码发生了异常,否则这里的代码不会执行 }
finally { //不管什么情况都会执行,包括try catch
里面用了return ,可以理解为只要执行了try或者catch,就一定会执行 finally }
回复 使用道具 举报
zhangle 发表于 2014-6-6 15:13
执行结果:
try
catch

只能证明finally一定会执行,证明不了return和finally的执行顺序
回复 使用道具 举报
无力交流啊!!说通俗一点:
执行return前会不会先跳转到finally执行其中的语句,
然后再执行return的内容?



不用写一堆代码就是为了证明finally是不是一定会执行,
会执行是肯定的!
要求的是顺序ok?

回复 使用道具 举报
提供一些思路吧:
一个线程不会在执行return的同时去执行finally。
线程执行是一步一步来的。



如果你懂线程那么就能写出来了,我看过一些教材,
也有说是finally先执行的,but....
先思考吧,小伙伴们!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马