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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张 涛 中级黑马   /  2012-9-15 21:11  /  1419 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

这个问题以前讨论过,现在也有许多人在问,也有许多人在回答。

我说下我的理解,可能有问题,因为思路有bug。

代码,大家都知道,简单写下:
int xxx(){
try{
return 1;
}finally{
return 2;
}
}

先执行return,返回一个值1到栈中;再执行finally,再返回一个值2到栈中。然后方法xxx结束,返回一个值,该值从栈中获取,栈后进先出,所以拿到值2.

这是我的理解,此时方法结束,可是这个方法执行完后,栈中多了一个值1,每执行一次栈中就多一个值,这不会对程序造成影响吗?

我是这样理解try和finally的。但上面这点没想明白。

评分

参与人数 1技术分 +1 收起 理由
admin + 1 有问题就拿出来交流

查看全部评分

5 个回复

倒序浏览
我的理解:如果在finally里有return,那么不好判断前面try语句中是否发生了异常,所以往往只能是返回一个固定的值(变量),所以不符合finally的意图,像这种情况应该把return语句放到catch中,根据异常情况,进行返回值判断,而只将finally作为放结束数据库联接等资源释放工作的代码

评分

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

查看全部评分

回复 使用道具 举报
int xxx()
{
   try
        {
           return 1;   //语句执行到这里,看到有finally,则执行finally语句。
        }
   finally
        {
           return 2;   //这里是return 2,没错。但是返回主函数的是 返回上面的那个。最后还是 返回1到主函数中,而不是2。
         }
   //一般这里还有个 return 3 。 这里是指 如果try{}出错,则是返回3到主函数中了,没出错就不执行。
}

评分

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

查看全部评分

回复 使用道具 举报
java中分为堆内存和栈内存。
堆中存一些new的对象,数组;栈中存一些变量。
你上边的int型的常量通常是存在常量池之中,因此并不是每次执行时都会增加一个一;
回复 使用道具 举报
我代码举例子是返回的1和2;如果返回一个变量呢?
回复 使用道具 举报
张 涛 发表于 2012-9-15 21:38
我代码举例子是返回的1和2;如果返回一个变量呢?

返回变量,也一样的啊。你看看下面的帖子,跟你提到这一样的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马