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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 位俊鹏 中级黑马   /  2014-3-2 23:33  /  1373 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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呢??

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

9 个回复

倒序浏览
先执行try  然后执行finally 没问题啊
回复 使用道具 举报
这是java基础里面的异常问题,异常有三种格式:1,try{}catch(Exception e){};2,try{}catch(){}finally{};3,try{}finally{};而return1是抛的待处理的异常,也可以抛出去,而finally里面的代码块是一定会输出的,不管是什么内容,我也是新手,希望多多探讨!

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
在try{}中,用return,break退出,程序还是要跳到finally{}块下执行。
但try{}中用exit()退出时,就不会这样,finally{}不会执行。
回复 使用道具 举报
finally里的语句是必须要执行的,即使在try中return了,finally还是要执行的;执行时当然先执行try再执行finally,只是finally是无论如何都会执行的语句,因此renturn 2会覆盖return 1,最终返回的是2;

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
ixiangfeng 发表于 2014-3-2 23:40
先执行try  然后执行finally 没问题啊

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

喔,咱俩理解的一样.
回复 使用道具 举报
先执行try  ,然后执行finally , finally是这个语句块中一定会执行到的语句。 为什么会出现2而没有出现1, 这个应该是覆盖了,如果是打印的话,则不会覆盖。
回复 使用道具 举报

先执行try  然后执行finally
不管前面的try执不执行。finally后面的都会执行的。
回复 使用道具 举报
try finally楼上的都说的很好了,smallT t  = new  smallT();类名应该首字母大写
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马