【问题标题】:Inconsistent output in exception handling in java [duplicate]java中异常处理中的输出不一致[重复]
【发布时间】:2023-03-05 03:43:01
【问题描述】:

当我多次运行这个程序时,我得到了不同的输出:

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)

第三个输出:

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

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

【问题讨论】:

  • 第二和第三有什么区别?

标签: java


【解决方案1】:

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

交错显示在屏幕上的顺序是不确定的。

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

【讨论】:

    猜你喜欢
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 2015-09-11
    • 1970-01-01
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多