黑马程序员技术交流社区
标题:
异常小练习
[打印本页]
作者:
杨千里
时间:
2012-9-15 22:35
标题:
异常小练习
本帖最后由 杨千里 于 2012-9-16 11:33 编辑
public class Test
{
public static String output="";
public static void foo(int i)
{
try
{
if(i==1)
{
throw new Exception();
}
output ="1";
}
catch(Exception e)
{
output ="2";
return; //这个return 是 神马 意思? 它有什么用?
}
finally
{
output ="3";
}
output ="4";
}
public static void main(String args[]){
foo(0);
foo(1);
}
}
结果是13423. foo(0)的结果是134. 这个知道 但 foo(1)的结果是23?有点不明白
作者:
吴硕
时间:
2012-9-15 22:47
return结束方法的运行,但finally内的代码一定会执行,这个retrun是起到迷惑的作用吧
作者:
郭阳
时间:
2012-9-15 22:54
问题1
//这个return 是 神马 意思? 它有什么用?
这个foo函数的返回值类型是void,就是没有具体返回值类型,所以return后面不能跟参数。在这里return的作用是返回调用他的函数,foo函数执行完毕。
————————————————————————————————————————————————————————————————————————————
问题2
但 foo(1)的结果是23?有点不明白
搞清楚执行顺序就明白了
AHUB721XGWM(~~3G4PB09U8.jpg
(66.01 KB, 下载次数: 6)
下载附件
2012-9-15 22:53 上传
作者:
柏占肖
时间:
2012-9-15 23:06
return的作用是退出foo方法,finally块的作用是不管try块里有没有捕获到异常都要执行finally块中的语句,当执行到return语句时就要在执行了finally块中的语句之后再退出foo方法
作者:
张飞年
时间:
2012-9-15 23:06
本帖最后由 张飞年 于 2012-9-15 23:08 编辑
楼主这个问题有关键处是要明白return执行顺序:foo(0)不再说了,调用foo(1)时先到try里判断是否==1,条件为真时执行异常,接下来到CATCH处理异常,输出“2”接着就return了,但是在return时先执行了finally里的内容,所以输出“23”,关于这个问题的更加详细的原理在于老师的面试宝典,上次我也回答了这么个问题呢,
http://bbs.itheima.com/thread-25257-1-1.html
里面有我详细解释,这里就不复制了。
作者:
吴通
时间:
2012-9-16 07:53
楼主:
首先return()语句表示一个方法返回的值
当return单独使用的时候,return语句通常用在一个方法体的最后,以退出该方法并返回一个值。
在Java语言中,单独的return语句用在一个方法体的中间时,会产生编译错误,因为有一些语句
执行不到。但可以通过把return语句嵌入某些语句像: if…else来使程序在未执行完方法中的所有语句时退出:、
void method(int a)
{
if( iVar>0 )
{
return;
}
else
{
System.out.println(iVar);
}
}
其次:楼主的代码有些毛病
应该是这样的
public class Test
{
public static String output="";
public static void foo(int i)
{
try
{
if(i==1)
{
throw new Exception();
}
output
+
="1";
}
catch(Exception e)
{
output
+
="2";
return; //这个return 是 神马 意思? 它有什么用?
}
finally
{
output
+
="3";
}
output
+
="4";
}
public static void main(String args[]){
foo(0);
System.out.println(output);
foo(1);
System.out.println(output);
}
}
执行到foo(0)的时候不满足try,所以执行 output ="1";
这时 output =""+"1";
再执行finally语句则output=""+"1"+"3"
执行最后的则 output=""+"1"+"3"+"4"
所以foo(0)为134
而执行foo(1)由于output是static静态的,所以outpur为""
满足try,抛出异常,执行catch语句,output变成"'+"2"
再执行finally语句,output=""+"2"+"3"
程序最后一句话是执行不到的
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2