Java System.in/out/err是否始终打开?

Java System.in/out/err是否始终打开?,java,io,system.out,system.in,system.err,Java,Io,System.out,System.in,System.err,Javadoc说,in、out和err已经“打开”,我只是想知道它们在程序完成后会关闭吗?如果没有,是否与使用后关闭任何I/O流引用的做法相矛盾?System.in/out/err这些类由JVM实例化,而不是由我们实例化。 因此JVM将负责关闭它们。stdin、stdout和stderr在很大程度上是一个Unix概念,但其他操作系统(如Windows)也复制了这个概念。这些由系统维护,通常不关闭它们 但是,您可以关闭它们,甚至在fork()程序时必须关闭它们,这是Unix将程序从命令行分离并在后

Javadoc说,
in
out
err
已经“打开”,我只是想知道它们在程序完成后会关闭吗?如果没有,是否与使用后关闭任何I/O流引用的做法相矛盾?

System.in/out/err这些类由JVM实例化,而不是由我们实例化。
因此JVM将负责关闭它们。

stdin
stdout
stderr
在很大程度上是一个Unix概念,但其他操作系统(如Windows)也复制了这个概念。这些由系统维护,通常不关闭它们

但是,您可以关闭它们,甚至在
fork()
程序时必须关闭它们,这是Unix将程序从命令行分离并在后台运行的方法,例如守护进程


系统。输入
/
输出
/
错误
遵循此策略。所以你可以关闭它们,但你不必关闭,因为它们是特殊的系统资源

你知道,我不确定。我当然希望所有流在退出时都被关闭(想想作为管道一部分的JVM,它必须发出输入/输出结束的信号),但是如果JVM退出时出现错误会发生什么呢?如果错误足够严重,我确信流不会被刷新和关闭,总是有可能丢失数据。也就是说,可以关闭它们。是的,可以手动关闭它们,但不必这样做。