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;
}
finally
{
output+="3";
}
output+="4";
}
public static void main(String args[]){
foo(0);
foo(1);
System.out.println(output);
}
}
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);
foo(1);
System.out.println(output);
}
}
2.向下执行,执行finally语句,无论异常是否捕获,finally语句都将执行,output+="3"(此时output为:13)
3.继续执行, output+="4",(此时output为:134)
4.执行Foo(1),出发异常条件,抛出异常,并由catch语句将其捕获,也就是说catch语句紧接着throws语句执行,所以output +="1"不会执行,执行catch语句中的内容,output+="2"(此时output为:1342)
5.执行return语句,准备返回退出main方法.
6.不好意思,线程发现了finally语句,打死也要执行,然后执行finally语句,output+="3"(此时output为:13423)
7.执行完毕,正式返回并退出main方法.如果楼主将return语句注释掉,你就会得到你想要的结果了~~报告完毕,谢谢指正~~~~~~~~