日期:2014-05-20  浏览次数:20793 次

Java中异常处理的顺序是如何进行的?
我写了一个很简单的算术异常的程序,如下:
public   class   ExceptionTest
{
    public   static   void   main(String[]   args){
      try
{
    int   k;
                      k   =   cc(10,   0);
    System.out.println(k);
}  
      catch   (Exception   e){
        System.out.println(e.toString());
e.printStackTrace();
}
          System.out.println( "end~~ ");
}

static   int   cc(int   i,   int   j)
{

int   k   =   (i   /   j);
return   k;
}

}

可是在运行的结果里却有点问题。
结果如下:
java.lang.ArithmeticException:   /   by   zero
end~~
java.lang.ArithmeticException:   /   by   zero
at   lydia.ExceptionTest.cc(ExceptionTest.java:32)
at   lydia.ExceptionTest.main(ExceptionTest.java:15)


问题就出在输出end~~
这个语句里!!!

这句是写在最后的(虽然没用finall这个关键词),可是运行的结里,有时end~~会出现在最后,有时会出现在中间,当然,有时又会出现在最开始的地方。

我想问一下,这是为什么?在JVM中如何具体操作的???

------解决方案--------------------
你应该在 cc(int i,int j) 中抛出异常
------解决方案--------------------
我运行了一下程序,现象确实像lz说的那样,不过,我觉得原因不在于end~~那句,而是这句:e.printStackTrace();如果把这句去掉的话,结果就只有一个了:java.lang.ArithmeticException: / by zero
end~~
也许jvm在调用e.printStackTrace()的时候启用什么机制吧,我也不确定~~呵呵,等待高手~~
------解决方案--------------------
Throwable.printStackTrace是输出到标准错误流
System.out是标准输出流

不是输出到同一个流

而两个流输出到屏幕上的先后顺序是和调用你java程序的程序有关系的.