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);
    } 
    }

解决方案 »

  1.   

    当foo(1)时,为什么 不执行  output+="4"?????
      

  2.   

    因为执行完finally 就返回return跳出了
      

  3.   

    运行轨迹如下:1. 执行Foo(0),没触发异常条件,继续执行,output +="1"  (此时output为:1)
    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语句注释掉,你就会得到你想要的结果了~~报告完毕,谢谢指正~~~~~~~~