黑马程序员技术交流社区
标题:
求助,这段程序的结果是什么,为什么?
[打印本页]
作者:
wangkai
时间:
2015-5-24 15:22
标题:
求助,这段程序的结果是什么,为什么?
本帖最后由 wangkai 于 2015-5-25 21:46 编辑
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;
}
finally
{
output+="3";
}
output+="4";
}
public static void main(String[] args)
{
foo(0);
System.out.println(output);//134
foo(1);
System.out.println(output);//13423
}
}
作者:
wangyu
时间:
2015-5-24 15:45
首先foo(0),进入方法,不满足if条件,所以不执行throw语句。执行 output+="1",此时output是“1”;然后因为try里面并没有抛出异常,所以catch里的语句不执行。跳到finally里,又加了个3,然后继续向下,加4.所以第一个结果就是134. 然后开始foo(1),这次满足if判断,执行throw语句,抛出异常,然后直接跳到catch语句里面,执行加2,然后读到return。这时候他已经开始准备返回了,但是在这之前要执行finally里面的语句,所以再加3.然后开始return,跳出方法。所以最后结果就是13423
作者:
csu050416
时间:
2015-5-24 15:48
foo(0)时,i==0不成立,运行output+="1",然后再相继运行finally里的+=“3”和外面的+=“4”,因为是字符串,所以结果为134字符串。此时output已经为“134”了,foo(1),i==1成立,运行catch里面的代码+=“2”,就变为了1342字符串,然后return,finally里的语句是一定要执行的+=“3”,变为13423字符串。+="4"因为return,所以不执行了。最后输出就为13423
作者:
wangkai
时间:
2015-5-24 16:11
哦,明白了,谢谢!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2