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程序的程序有关系的.