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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 罗全涛 于 2011-12-28 20:03 编辑

finally中的语句是执行在try中的return前还是return后?还有finally中当加上return是报错了为什么?

评分

参与人数 1技术分 +1 收起 理由
吴上储 + 1

查看全部评分

12 个回复

倒序浏览
祁焱 黑马帝 2011-12-28 11:44:40
沙发
finally中的语句是执行在try中的return前还是return后,你可以用一下代码测试一下:
public static void main(String[] args) {
        int temp=0;
        try
        {
            temp=1;
            return;
            
            
        }
        catch (Exception e) {
        }
        finally
        {
            System.out.println(temp);
        }
运行结果:temp=1;所以finally中的语句是执行在try中的return之前。finally中加上return我在Netbeans上运行没有报错,不知道你用的什么工具。

评分

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

查看全部评分

回复 使用道具 举报
先执行return语句,再执行finally语句,然后将结果返回,也可以说return语句执行了两次,一次在finally之前,一次在finally之后,但是返回的确实第一次执行的值。
例子
public class Demo{

public static void main(String args[]){

int num = 10;

System.out.println(test(num));

}

public static int test(int b){

try{

b += 10;

return b;

}catch(RuntimeException e){

}catch(Exception e2){

}finally{

b += 10;

}

return 0;

}

}

评分

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

查看全部评分

回复 使用道具 举报
先执行return语句,再执行finally语句,finally是最后无论如何倒要执行的代码片段。比如当你和数据库连接的时候,你出现了错误,但是在finally的代码块里面你必须吧占用系统资源的内存释放掉
回复 使用道具 举报
张帅 黑马帝 2011-12-28 14:35:14
报纸
1253431283 发表于 2011-12-28 14:21
先执行return语句,再执行finally语句,finally是最后无论如何倒要执行的代码片段。比如当你和数据库连接的 ...

关于finally 中return 出错,没听懂,还请讲解下
回复 使用道具 举报
比如说你在使用JDBC操作数据库是你的用Connection类来打开关闭数据库的连接,之后使用Stattement或者PreparedStatement来执行SQL语句,当你在在执行操作sql语句的时候可能出现错误,无论是否能成功的返回你想要的数据结果,你都得在finally里面把数据库所占用的数据库连接关闭
回复 使用道具 举报
1253431283 黑马帝 2011-12-28 14:40:46
7#
张帅 发表于 2011-12-28 14:35
关于finally 中return 出错,没听懂,还请讲解下

比如说你在使用JDBC操作数据库是你的用Connection类来打开关闭数据库的连接,之后使用Stattement或者PreparedStatement来执行SQL语句,当你在在执行操作sql语句的时候可能出现错误,无论是否能成功的返回你想要的数据结果,你都得在finally里面把数据库所占用的数据库连接关闭

评分

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

查看全部评分

回复 使用道具 举报
张帅 黑马帝 2011-12-28 15:54:42
8#
1253431283 发表于 2011-12-28 14:40
比如说你在使用JDBC操作数据库是你的用Connection类来打开关闭数据库的连接,之后使用Stattement或者Prep ...

原来是这样,了解了,十分感谢
回复 使用道具 举报
罗全涛 黑马帝 2011-12-28 20:01:48
9#
祁焱 发表于 2011-12-28 11:44
finally中的语句是执行在try中的return前还是return后,你可以用一下代码测试一下:
public static void m ...

首先要道歉,我在公司没环境,看了别人的例子,那里说finally有return会报错。所以觉得不对,上来问问,并没有操作。还有你没明白我的意思,我说如果try和finally中都有return,并且返回值不同,最后返回谁?
我回来后马上验证了。finally中可以有return,如果try和finally中都有return,返回finally中的。
  1. class  ReturnDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int a = 0;
  6.                
  7.                 System.out.println("a:"+sop(a));
  8.         }
  9.         public static int sop(int a)
  10.         {       
  11.                 try
  12.                 {
  13.                         System.out.println("try被"+ (++a) +"执行"+","+"a:"+a);
  14.                         return a*100;
  15.                 }
  16.                 catch (Exception e)
  17.                 {
  18.                         System.out.println(e.toString());
  19.                 }
  20.                 finally
  21.                 {
  22.                         System.out.println("finally被执行"+","+"a:"+a);
  23.                         return a*10;
  24.                 }
  25.         }
  26. }
复制代码
结果:
try被1执行,a:1
finally被执行,a:1
a:10
回复 使用道具 举报
罗全涛 黑马帝 2011-12-28 20:02:44
10#
就此结贴吧,这问题没别要再纠结了。
回复 使用道具 举报
颜小飞 黑马帝 2011-12-28 23:18:04
11#
finally是在tryl中的return 之后执行的。对于你说的finally中有return 会报错。可能是你码有问题,我测试了下,这种写法是不会报错的。
回复 使用道具 举报
罗全涛 黑马帝 2011-12-29 12:56:13
12#
颜小飞 发表于 2011-12-28 23:18
finally是在tryl中的return 之后执行的。对于你说的finally中有return 会报错。可能是你码有问题,我测试了 ...

恩,谢谢了,
回复 使用道具 举报
付星 黑马帝 2011-12-29 17:42:14
13#
finally是执行在try里return 之前的,至于finally里不能写return还是因为finally是执行在try里return 之前的,如果try没有return,finally也会执行到"}"右括号这里,所以不能有
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马