楼主:
首先foo(0)的时候,先读try里面的语句,i !=1,所以执行output+="1",output变成" "+"1",
由于没有抛出异常,所以执行finally语句output+="3",output变成" "+"1"+"3"
按照顺序执行到output+="4"; 则output变成" "+"1"+"3"++"4"
所以foo(0)结果为134
之所以楼主对foo(1)不理解是因为楼主没有注意output前面的修饰符static
由于output被static修饰,所以output属于静态数据,也即共享数据
执行foo(0)的时候output=" "+"1"+"3"++"4",所以执行foo(1)的时候
output的初始值就为" "+"1"+"3"++"4",再进行运算,如果通过改动去掉前面
的static修饰,那么结果就不一样了
class Test1
{
public static void foo(int i)
{
String output="";
try
{
if(i==1)//foo(1),//这里执行,结果是直接到catch
throw new Exception();
output+="1";
}
catch(Exception e)
{
output+="2"; //这句执行后是2
return;
}
finally
{
output+="3";//这段也执行了,成23,那不就结束了吗?结果不是23吗?
}
output+="4";
System.out.println(output);
}
public static void main(String args[])
{
foo(0);
foo(1);
}
}
代码改为这个时,foo(0)和foo(1)的结果就不再互相影响了
|