同样的代码,运行一次一种结果,怎么回事?
本帖最后由 xingqi10 于 2012-11-12 22:33:16 编辑 package exception;
class MyException2 extends RuntimeException{
public MyException2() {
super();
}
public MyException2(String message) {
super(message);
}
}
class MyException1 extends Exception{
public MyException1() {
super();
}
public MyException1(String message) {
super(message);
}
}
public class MyExceptionDemo {
public static void divide(int a,int b){
if(b == 0){
throw new MyException2("亲,除数不能为0");
}
}
public static void main(String[] args) {
try{
divide(1,0);
}catch(Exception e){
String msg = e.getMessage();
System.out.println("msg="+msg);
System.out.println("2");
e.printStackTrace();
System.out.println("1");
}
System.out.println("222");
}
}
以上是代码:
运行结果1:
msg=亲,除数不能为0
2
exception.MyException2: 亲,除数不能为01
222
at exception.MyExceptionDemo.divide(MyExceptionDemo.java:27)
at exception.MyExceptionDemo.main(MyExceptionDemo.java:32)
运行结果2:
msg=亲,除数不能为0
2
exception.MyException2: 亲,除数不能为0
1
222
at exception.MyExceptionDemo.divide(MyExceptionDemo.java:27)
at exception.MyExceptionDemo.main(MyExceptionDemo.java:32)
运行结果3:
msg=亲,除数不能为0
2
exception.MyException2: 亲,除数不能为0
at exception.MyExceptionDemo.divide(MyExceptionDemo.java:27)
at exception.MyExceptionDemo.main(MyExceptionDemo.java:32)
1
222
[最优解释]
是 IDE 的多线程输出造成的
Eclipse 和 Netbeans 都是用一个专门的线程用来输出 System.out,另一个专门的线程用来输出 System.err
当你的程序里同时有这两种输出的时候,就会表现为多线程式的随机输出,如果单看你用 System.out 输出的内容,还是按顺序的。
你的输出都是用了 System.out ,只有这一句:
e.printStackTrace();
是用了 System.err,下面是这个方法的源代码,在 Throwable.java 中:
public void printStackTrace() {
printStackTrace(System.err);
}