同样的代码,运行一次一种结果,怎么回事?
本帖最后由 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);
}
------其他解决方案--------------------你这个是一次结果,只不多控制台的异常位置变化而已.....一般采取方式是....不用管它....
------其他解决方案--------------------不懂啊 刚学java没几天
------其他解决方案--------------------位置不一样,内容是一样的,造成这位置不一样的原因,应该是异常产生的快慢造成的。
比较快时,就在打印1和222之前产生了,当然就在前面了。
------其他解决方案--------------------楼上正解!其实,这个无所谓把
------其他解决方案--------------------如果你用控制台来运行,就不会有这个问题。
如果你把
e.printStackTrace();
改成
e.printStackTrace(System.out);
也不会有这个问题。