Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我在java中启动我的个性化异常时,为什么解析器不';你不按照我的代码顺序做吗?_Java - Fatal编程技术网

当我在java中启动我的个性化异常时,为什么解析器不';你不按照我的代码顺序做吗?

当我在java中启动我的个性化异常时,为什么解析器不';你不按照我的代码顺序做吗?,java,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

使用此代码:

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()

您知道为什么在“捕获它”之后会打印“Throw SimpleException from f()”?

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

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

来自两个不同流的消息的顺序不保证。。。使用相同的流,就可以了

如果你对这些问题感兴趣,读一下可能会很有趣


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


如果只使用一个,则顺序正确。

因为您正在写入两个不同的流-System.out和System.Err。将这两个文件写入同一个文件,然后您将按照您想要的顺序获得。

您正在将异常打印到
System.err
流中。其余的输出转到
System.out
。这两个是不同的系统流,每个流都有自己的缓冲区和定时,但默认情况下,它们有共同的接收端——控制台

问题是,这两个流中的缓冲区是不同步的,因此不能保证这两个流会按照指定的顺序输出


您可以在打印后通过调用
flush()
立即强制流输出。

您还可以看到转换错误消息,例如空指针异常的堆栈跟踪可以与发送到System.out lines的内容交错扔,而不是发射。
System.err.println("Caught it!");