黑马程序员技术交流社区
标题:
这个程序的执行结果为什么又是13423??
[打印本页]
作者:
我自信我很牛
时间:
2013-4-4 11:02
标题:
这个程序的执行结果为什么又是13423??
class Test1
{
//public String output="";
public C c=new C();
public static void main(String args[])
{
Test1 t=new Test1();
//foo(0);
System.out.println(t.foo(0).msg);//134
//foo(1);
System.out.println(t.foo(1).msg); //13423
}
public C foo(int i)
{
try
{
if(i==1)
throw new Exception();
c.msg+="1";
}
catch(Exception e)
{
c.msg+="2";
return c; //在内存中开避空间用为存储当前output值
}
finally
{
c.msg+="3";
//System.out.println("output="+c.msg);
}
c.msg+="4";
return c;
}
}
class C
{
String msg="";
}
作者:
随便
时间:
2013-4-4 11:13
你的另外一个问题我也看了。
http://bbs.itheima.com/thread-44099-1-1.html
这个程序的执行结果怎么是8 求解释 。
是吧。
你一定是学了异常处理,然后就开始滥用异常。
if(i==1)
throw new Exception();
c.msg+="1";
像这种代码都抛出异常,那不知道要抛出多少异常。
if(i!=1) c.msg+="1"; 这样反向判断不就完了??????
作者:
杜超
时间:
2013-4-4 12:15
t.foo(0).msg运行过程:
因为i=0,执行c.msg+="1";这时没有发生异常,跳过catch,运行finally, c.msg+="3";最后执行 c.msg+="4";
所以结果为134;
t.foo(1).msg运行过程:这时i=1,执行if(i==1)throw new Exception();, c.msg+="1"; 这个没有执行,异常抛出,
执行catch语句,c.msg+="2",因为有return c; , c.msg+="4"; 就不执行了,但finally是必须执行的, c.msg+="3"; 会运行。
因为t.foo(0).msg 已经运行过,所以在t.foo(1).msg 运行时,接着上次的运算结果继续运算。
所以结果是13423,而不是23;
作者:
日三省
时间:
2013-4-4 13:38
msg是字符串类型.. +表示连接.
t.foo(0).msg运行过程:
因为i=0,false 不执行语句,没有异常抛出. 执行下一句 c.msg+="1";
finally 中的语句必须执行的. 执行c.msg+="3";
再顺序执行下一句 c.msg+="4";
最后 return c;
输出134
t.foo(1).msg运行过程:这时i=1,执行throw new Exception(); 异常抛出,
跳转 执行 catch语句,c.msg+="2",
下一句虽然是 return c; 但是finally是必须执行的,所以先执行 finally中的语句 c.msg+="3";
再回去执行 return c;
方法结束
由于之前msg的值是134 后面继续连接上23
就是13423
输出 12323
这题虽然刚没看懂..倒腾了半天..通了
总结:
不论 语句位置 位置如何.
finally会在 return之前执行.
作者:
黄玉昆
时间:
2013-4-4 17:04
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2