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

use*_*212 4 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!");
    }

  }
}
Run Code Online (Sandbox Code Playgroud)

在某些情况下,我有这个输出:

Caught it!
Throw SimpleException from f()
Run Code Online (Sandbox Code Playgroud)

你知道为什么"抓住它后"会打印出"从f()中抛出SimpleException"吗?

ppe*_*rka 8

您正在两个不同的输出流上打印:

System.out.println("Throw SimpleException from f()");
Run Code Online (Sandbox Code Playgroud)

System.err.println("Caught it!");
Run Code Online (Sandbox Code Playgroud)

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

如果您对这些问题感兴趣,可能会有兴趣阅读


Duk*_*ing 7

System.err并且System.out是不同的流,因此一个人的输出可能出现在另一个之前.

如果您只使用一个,它将按正确的顺序排列.