黑马程序员技术交流社区

标题: try和finally执行问题 [打印本页]

作者: 位俊鹏    时间: 2014-3-2 23:33
标题: try和finally执行问题
public class  smallT
{
      public static void  main(String args[])
      {
            smallT t  = new  smallT();
            int  b  =  t.get();
            System.out.println(b);
      }
      
      public int  get()
      {
            try
            {
                  return 1 ;
            }
            finally
            {
                  return 2 ;
            }
      }
}
这个代码输出的竟然是2
为什么不是1呢?在执行时先执行try,还是finally呢??


作者: ixiangfeng    时间: 2014-3-2 23:40
先执行try  然后执行finally 没问题啊
作者: 遗忘的青春年华    时间: 2014-3-2 23:44
这是java基础里面的异常问题,异常有三种格式:1,try{}catch(Exception e){};2,try{}catch(){}finally{};3,try{}finally{};而return1是抛的待处理的异常,也可以抛出去,而finally里面的代码块是一定会输出的,不管是什么内容,我也是新手,希望多多探讨!
作者: twtzhongxin    时间: 2014-3-2 23:47
在try{}中,用return,break退出,程序还是要跳到finally{}块下执行。
但try{}中用exit()退出时,就不会这样,finally{}不会执行。
作者: 行如止水    时间: 2014-3-3 00:03
finally里的语句是必须要执行的,即使在try中return了,finally还是要执行的;执行时当然先执行try再执行finally,只是finally是无论如何都会执行的语句,因此renturn 2会覆盖return 1,最终返回的是2;
作者: 位俊鹏    时间: 2014-3-3 00:10
ixiangfeng 发表于 2014-3-2 23:40
先执行try  然后执行finally 没问题啊

那就是返回的1被后来的2给覆盖了,可以这么理解吗?
作者: 位俊鹏    时间: 2014-3-3 00:11
行如止水 发表于 2014-3-3 00:03
finally里的语句是必须要执行的,即使在try中return了,finally还是要执行的;执行时当然先执行try再执行fi ...

喔,咱俩理解的一样.
作者: 还是回去火星吧    时间: 2014-3-3 00:22
先执行try  ,然后执行finally , finally是这个语句块中一定会执行到的语句。 为什么会出现2而没有出现1, 这个应该是覆盖了,如果是打印的话,则不会覆盖。
作者: 小周务商    时间: 2014-3-3 00:48

先执行try  然后执行finally
不管前面的try执不执行。finally后面的都会执行的。
作者: chenfc8578    时间: 2014-3-3 09:01
try finally楼上的都说的很好了,smallT t  = new  smallT();类名应该首字母大写




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2