2015-04-30 47 views
0

当我多次跑这个程序,我得到不同的输出:不一致的输出在java中

public class Demo { 
public static void main(String[] args) { 
    try { 
     System.out.println("try block"); 
     int a = 10/0; 
    } catch (Exception e) { 
     System.out.println("catch block"); 
     int a = 10/0; 
    } finally { 
     System.out.println("finally block"); 
     int a = 10/0; 
    } 
} 

}

首页输出:

Exception in thread "main" java.lang.ArithmeticException:/by zero 
    at kd.demo.Demo2.main(Demo2.java:14) 
try block 
catch block 
finally block 

第二输出:

Exception in thread "main" try block 
catch block 
finally block 
java.lang.ArithmeticException:/by zero 
    at kd.demo.Demo2.main(Demo2.java:14) 

Thir d输出:

Exception in thread "main" try block 
catch block 
finally block 
java.lang.ArithmeticException:/by zero 
    at kd.demo.Demo2.main(Demo2.java:14) 

当我编译和执行这个程序多次,我得到不同的输出。大多数时候我拿到了第三个,这不是问题。但是,我对其他输出(第一和第二)感到困惑。

+3

第二个和第三个有什么区别? –

回答

4

您正在写入System.out(您的println语句)和System.err(将从finally块中引发的未捕获异常打印的堆栈跟踪)。

交叉显示在屏幕上的顺序相当不确定。

您可以通过将消息发送到System.err而不是System.out来“解决”此问题。然后一切都会转到同一个流。