使用此代码:

class SimpleException extends Exception {}

public class SimpleExceptionDemo {

  public void f() throws SimpleException {
    System.out.println("Throw SimpleException from f()");
    throw new SimpleException();
  }
  public static void main(String[] args) {
    SimpleExceptionDemo sed = new SimpleExceptionDemo();
    try {
      sed.f();
    } catch(SimpleException e) {
      System.err.println("Caught it!");
    }

  }
}

在某些情况下,我有此输出:
Caught it!
Throw SimpleException from f()

您知道为什么在“抓到它”之后打印“从f()抛出SimpleException”吗?

最佳答案

您正在两种不同的输出流上进行打印:

System.out.println("Throw SimpleException from f()");


System.err.println("Caught it!");

不能保证两个不同流中出现的消息顺序...使用相同的流,就可以了。

如果您对此类问题感兴趣,请继续阅读
  • Happened-before
  • Java memory model
  • JCIP: Java Concurrency in Practice
  • 07-24 15:18