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);
}
}
为什么不是134234啊,而是13423

解决方案 »

  1.   

    因为异常已经找到处理器 
    处理好后 从处理的地方后面继续执行 
    package test;public class Test
    {
        public static String output = "";    public static void foo(int i) throws Exception
        {
            try
            {
                if (i == 1)
                {
                    throw new Exception();
                }
                output += "1";
            }
            finally
            {
                output += "3";
            }
            output += "4";
        }    public static void main(String args[])
        {
            try
            {
                foo(0);
            }
            catch (Exception e)
            {
                output += "2";
            }
            try
            {
                foo(1);
            }
            catch (Exception e)
            {
                output += "2";
            }
            System.out.println(output);
        }
    }这样就是13423
      

  2.   

    ...错了  应该是13432   要想13423  finally放到main中的try catch来
      

  3.   

    catch(Exception e){
    output+="2";
    return;
    }注意这里的return
    发生异常,也就是 i==1 的时候,直接return掉了,根本没有执行 +"4"这里
    如果要得到你想要的结果  134234
    就把这里的return 去掉