黑马程序员技术交流社区
标题:
异常处理块
[打印本页]
作者:
kimi
时间:
2013-6-10 11:47
标题:
异常处理块
本帖最后由 kimi 于 2013-6-10 15:45 编辑
int f(){
int ret=0;
try{
ret+=1;
return ret;
}catch(Exception e){
ret+=10;
}finally{
ret+=100;
}
return ret;
}
ret为什么返回的是1 不是应该是101么
作者:
x.love
时间:
2013-6-10 12:07
本帖最后由 x.love 于 2013-6-10 12:09 编辑
因为finally语句块中对ret变量值的修改仅仅在finally语句块中有效,但是返回结果就无效了。这是基础测试中的一道题呀
作者:
不破大地
时间:
2013-6-10 14:10
哈哈,你怎么算的是101呢,return语句因为要进栈,然后出栈,所以return在finally执行后在执行。。。
作者:
shang1jk
时间:
2013-6-10 14:21
大概是return ret;语句之后这个返回值1就已经在一个内存空间存着了,等待返回但是还没有返回, 知道finally语句运行完了再返回。
而最后那个return ret;不会被执行。
作者:
Renica
时间:
2013-6-10 14:25
因为没有异常发生,所以后面的就不执行了,直接在第一个return就返回了。
作者:
孔雀东南飞
时间:
2013-6-10 14:58
本帖最后由 孔雀东南飞 于 2013-6-10 15:00 编辑
int f(){
int ret=0;
try{
ret+=1;
<FONT color=red> return ret;//此时已经返回ret 值为1,后面必须执行finally,但是最后的return 不执行了。因此返回了1但是ret'值最后为101,只不过没有返回
</FONT> }catch(Exception e){
ret+=10;
}finally{
ret+=100<FONT color=red>;//此句执行 ret=101 但不打印</FONT>
}
<FONT color=red> return ret;//此句执行不到
</FONT>}
复制代码
楼主可明白了。。?
作者:
x.love
时间:
2013-6-10 15:41
x.love 发表于 2013-6-10 12:07
因为finally语句块中对ret变量值的修改仅仅在finally语句块中有效,但是返回结果就无效了。这是基础测试中 ...
因为finally中的ret是系统重新定义的一个引用变量,指向了try中的ret。无论finally中的ret怎么改变,都不影响try中的值。
作者:
pys200603027
时间:
2013-6-10 21:47
虽然说finally中的语句块是必须运行的,但是在try块里return的话,即使finally中ret+=100;但是并不能改变掉try块中的return ret;代码最后的return ret,只有在try块出现了异常,才会跳到该处运行。
作者:
孔雀东南飞
时间:
2013-6-10 23:37
先执行第一个return
在执行finally
第二个return不执行
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2