黑马程序员技术交流社区
标题:
异常处理
[打印本页]
作者:
hanrongle
时间:
2013-7-13 08:33
标题:
异常处理
本帖最后由 杨兴庭 于 2013-7-14 18:17 编辑
int f(){
int ret=0;
try{
ret+=1;
return ret;
}catch(Exception e){
ret+=10;
}finally{
ret+=100;
}
return ret;
}
ret为什么返回的是1 不是应该是101吗?
作者:
mk7
时间:
2013-7-13 08:52
因为你在try块中有return语句 程序执行到该语句时就直接将1返回了, 下面的语句不再执行
try{
ret+=1;
return ret;//return将1返回,并跳出f()方法,finally内的语句不再执行
}
复制代码
作者:
mk7
时间:
2013-7-13 08:53
因为你在try块中有return语句 程序执行到该语句时就直接将1返回了, 下面的语句不再执行
try{
ret+=1;
return ret;//return将1返回,并跳出f()方法,finally内的语句不再执行
}
复制代码
作者:
hanrongle
时间:
2013-7-13 09:07
mk7 发表于 2013-7-13 08:53
因为你在try块中有return语句 程序执行到该语句时就直接将1返回了, 下面的语句不再执行 ...
不是说有finally,都会被执行吗?
作者:
mk7
时间:
2013-7-13 09:15
真不好意思 给你说错了 原因是你的return语句放在finally块外面了 放在finally里面就返回101了
作者:
一木榜公
时间:
2013-7-13 09:17
本帖最后由 一木榜公 于 2013-7-13 09:18 编辑
<P>try{
ret+=1;
return ret; // 这时 return语句下面的语句执行不到, 给函数返回1
}</P>
<P>catch(Exception e) //try语句如果没有抛出异常,catch块不执行,</P>
<P>{
ret+=10;
}</P>
<P>finally //finally肯定执行,这是规定,这时ret内存中的值是 101 ,但是没返回给函数</P>
<P>{
ret+=100;
}</P>
<P> </P>
<P>return ret; //这句是执行不到的,因为前面有return语句,return语句下面的语句肯定执行不到</P>
复制代码
作者:
左手神刀
时间:
2013-7-13 14:55
楼主可以试试,如果在final块中末尾加一句打印语句把 ret 打印一下的话 他的值是101, 但返回的值却是1, 这说明 f() 方法是先在 try块中先把1给返回去了,然后再执行的final块的。
作者:
木、易m
时间:
2013-7-13 15:24
finally里面是不能对返回值进行修改的,所以你返回的是1,而不是101,finally是先于try代码块里面的return语句执行的,所以
int f(){
int ret=0;
try{
ret+=1;
return ret;
}catch(Exception e){
ret+=10;
}finally{
ret+=100;//这个是先于return语句执行,就是执行完finally里面的语句后,才会执行return语句,但是finally是不能对返回值进行修改的,所以你返回的是1而不是101
}
return ret;//这里是执行不到的,try代码块里面的return返回后这里就执行不了了
}
复制代码
作者:
280270738
时间:
2013-7-13 21:59
执行完return语句就结束了
作者:
wll_sx1990
时间:
2013-7-14 00:40
朋友,如果程序中有finally,那么必须是先执行完finally里面的内容然后再去执行return的,但是,有一点,finally中修改了值,但是,return已经把返回值放在了池中,就像是发射器上,所以,虽然执行了finally但是依旧不会返回修改后的那个值。
作者:
白_蓝(八公)
时间:
2013-7-14 08:56
其实这里面有两点你留心就可以了~第一是finally是无法改变返回值的!其二是看return在什么地方!!根据你的代码,try中有return,也就是已经有返回值了,返回的当然是1.而根据我和你说的第一点~finall是无法改变返回值的,所以不可能输出101!!希望对你有帮助
作者:
董凯
时间:
2013-7-14 13:41
public class demo2 {
public static void main(String[] args) {
System.out.println(f());
}
static int f(){
int ret=0;
try{
ret+=1;
System.out.println(ret);
return ret;
}catch(Exception e){
ret+=10;
}finally{
ret+=100;
System.out.println(ret);
return ret;
}
// return ret;
}
这样写会返回101
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2