java - java中异常处理的输出不一致

标签 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)

第三个输出:

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

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

最佳答案

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

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

您可以通过将消息发送到 System.err 而不是 System.out 来“修复”此问题。然后所有内容都会进入同一个流。

关于java - java中异常处理的输出不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29960190/

相关文章:

java - Google Calendar API 是否适合我的问题?

java - 在方法的开头使用注入(inject)的 spring bean 和自定义注释做一些事情

java - Google Guava 与 Apache Commons

java - 查看字符串是否包含数组中的元素

java - 无法从 Google Play Android Developer API 获取订阅详细信息

java - 确定 java 应用程序在 Eclipse 中是否处于 Debug模式

java - 如何从 InputStream 转换为 AudioInputStream

java - 慢速线程处理的缓解技术

java - 使用 google-api-java-oauth 的 oauth1 示例

java - 如何在 Java 中的对象上强制调用父类(super class)实现 Object.toString() 而不是子类重写实现