首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Exception >

Java中异常处理的顺序是如何进行的?

2014-01-26 
Java中异常处理的顺序是如何进行的?我写了一个很简单的算术异常的程序,如下: public class ExceptionTest {

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

 

        

热点排行