package com.cxx.exception;public class ExcptionTest { public void method() throws Exception{
System.out.println("thank you for your help");
throw new Exception();
}

public static void main(String[] args) {
ExcptionTest excptionTest=new ExcptionTest();
try {
excptionTest.method();

} catch (Exception e) { e.printStackTrace();
}
finally {
System.out.println("say thanks the end");
}
}
}
运行执行的结果是
thank you for your help
say thanks the end
java.lang.Exception
at com.cxx.exception.ExcptionTest.method(ExcptionTest.java:7)
at com.cxx.exception.ExcptionTest.main(ExcptionTest.java:13))
调试的结果却是
thank you for your help
java.lang.Exception
at com.cxx.exception.ExcptionTest.method(ExcptionTest.java:7)
at com.cxx.exception.ExcptionTest.main(ExcptionTest.java:13)
say thanks the end
异常处理是不是按顺序执行的?
求深入分析

解决方案 »

  1.   

    java.lang.Exception
    at com.cxx.exception.ExcptionTest.method(ExcptionTest.java:7)
    at com.cxx.exception.ExcptionTest.main(ExcptionTest.java:13)这部分是系统打印的后台信息吧调试的时候 ,应该是后台把异常信息打印出来,然后再把内容打印出来吧
      

  2.   

    给你推荐一个链接http://www.ibm.com/developerworks/cn/java/j-lo-finally/index.html#ibm-content
      

  3.   

    正常情况下应该是这样的吧:
    thank you for your help
    java.lang.Exception
    say thanks the end
    at com.cxx.exception.ExcptionTest.method(ExcptionTest.java:7)
    at com.cxx.exception.ExcptionTest.main(ExcptionTest.java:13))
    多线程的问题。如果真是楼主写的那样我就没法理解了。
      

  4.   

    如果你去多运行几次
    情况又不一样了
    第一,二次
    thank you for your help
    say thanks the end
    java.lang.Exception
    at com.cxx.exception.ExcptionTest.method(ExcptionTest.java:7)
    at com.cxx.exception.ExcptionTest.main(ExcptionTest.java:13)
    第三,四次
    java.lang.Exception
    at com.cxx.exception.ExcptionTest.method(ExcptionTest.java:7)
    at com.cxx.exception.ExcptionTest.main(ExcptionTest.java:13)
    thank you for your help
    say thanks the end
      

  5.   

    这个程序运行多次的结果也是不一样的,我认为跟流有关系。e.printStackTrace();是将异常信息定位到错误流,可能错误流和标准输出流是两个不同的线程,所以顺序是不能保证的。如果将这个方法修改为:
    e.printStackTrace(System.out);那么输出结果是确定的。
      

  6.   

    异常处理是有顺序的,肯定会先处理方法中的异常,你可以看下Exception的源码
      

  7.   


    这样就统一了,你会看到异常执行的顺序
    catch (Exception e) {
    e.printStackTrace(System.out);
    }
      

  8.   

    8楼正解。
    你可以看下源码e.printStackTrace,里面是做了同步处理的,但是默认调用的是System.err输出流。