黑马程序员技术交流社区
标题:
给大家出道题,运算后的结果是多少?并注明为什么!
[打印本页]
作者:
︶喂〆快到碗里
时间:
2014-8-31 20:15
标题:
给大家出道题,运算后的结果是多少?并注明为什么!
本帖最后由 ︶喂〆快到碗里 于 2014-9-7 21:33 编辑
class Test
{
public static String output="";
public static void foo(int i)
{
try
{
if(i==1){
throw new RuntimeException();
}
output+="1";
}
catch (RuntimeException e)
{
output+="2";
return;
}
finally
{
output+="3";
}
output+="4";
}
public static void main(String[] args)
{
foo(0);
System.out.println(output);
foo(1);
System.out.println(output);
}
}
作者:
潘多拉
时间:
2014-8-31 21:31
foo(0)=8,foo(1)=6,因为0不等于1所以不抛出异常,执行一次0+1,不执行catch,finally执行,最后一句也执行,所以是0+1+3+4=8;foo(1),满足条件抛出异常,所以,1+1不执行,执行catch,因为有return所以直接返回值,下面的+4不执行,但因为有finally所以再加3,所以是1+2+3=6
作者:
潘多拉
时间:
2014-8-31 21:32
不知道对不对啊
作者:
夜班心桥
时间:
2014-8-31 22:11
134,传递参数0时,不会抛出运行时异常。所以执行完try里面的 output+="1";语句,接着执行finally和语句块外面的语句。
13423,传递参数1时,抛出异常,执行catch中的 output+="2";无论是否捕捉到异常,都需要执行finally里面语句块。如果捕捉到异常,finally之外的语句将不被执行。所以执行output+="3"。
【另异常请参考:
http://bbs.itheima.com/thread-140825-1-1.html
】
作者:
七弟
时间:
2014-8-31 22:32
路过 凑热闹
作者:
天邃任我桓
时间:
2014-8-31 22:58
还没学到,暂时一知半解
作者:
好听就好
时间:
2014-8-31 23:15
因为要打印的结果output是static String类型的。所以output在程序运行时,一直存在。String字符串相加,只是将字符串链接。
foo(0)。无异常,程序执行try--》finally。try结果output=“1”----》finally结果output=“134”
foo(1)。异常, 程序执行try--catch---finally。执行try时,先抛出异常,后边output+="1";不执行。然后,catch,结果:output=“1342”;虽然有return,但是有finally语句,所以仍然执行finally语句。结果output=“13423”。执行完finally后,立刻转到catch中的return。程序结束。
细节可能不足,请酌情采纳。另外推荐搜索一下:try catch finally语句执行顺序,try catch finally中带return语句的执行顺序。
作者:
姠佐メ亾佑つ
时间:
2014-8-31 23:38
楼上的注意《 public static String output="";》中的关键字”String“
结果应该是 :
134
13423
作者:
迷失的独白
时间:
2014-9-1 00:02
134(不等于1,加1,执行finally加3,往下执行加4)
13423(等于1,捕获,加2,执行finally加3,结束)
作者:
梧桐树下
时间:
2014-9-1 00:14
134'13423视频里的题
作者:
︶喂〆快到碗里
时间:
2014-9-7 21:34
姠佐メ亾佑つ 发表于 2014-8-31 23:38
楼上的注意《 public static String output="";》中的关键字”String“
结果应该是 :
134
恩!关键就是static String
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2