我在网上阅读了几篇关于Java中System.out.println()
的解释文章。其中大部分都是这样的:
我的问题是,当我们在代码中使用
System
是java.lang
包中的一个final
类。out
是System
类中类型为PrintStream
的public static
对象。println()
将一行文本输出到输出流。
System.out.println()
时,为什么它最终会写入控制台? 这篇文章解释了我们如何通过调用System.setOut()
将其写入文件。所以我的问题是,System.setOut()
在哪里被调用以将输出重定向到控制台?
我检查了System.setOut()
的源代码。它调用了一个native
方法setOut0()
。这个方法在initializeSystemClass()
方法中直接调用传递给它fdOut
,这是一个在这里定义的FileOutputStream
。我没有找到任何传递控制台输出流给setOut0()
的地方,也没有发现任何非本地的setOut()
的调用。JVM在启动执行时是否在System
类之外的其他地方完成了这个操作?如果是,能否有人指出来?
fdout
实际上是输出到控制台。我想它就像 Linux/Unix 系统中的FileOutputStream
一样,因为在这些系统中,I/O 设备也被视为文件。 - samabcdeout
最初是如何设置的?”和“它是从哪里设置的?”这是我理解你的问题的方式,但似乎答案正在回答其他问题。 - Scratte