当我在java中启动我的个性化异常时,为什么解析器不遵循我的代码顺序?

使用此代码:

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

转载注明原文:当我在java中启动我的个性化异常时,为什么解析器不遵循我的代码顺序? - 代码日志