我是java的新手,从oracle的官方java文档中学习java。在java文档提供的大多数程序示例中,system.out.println(...)
语句用于在屏幕上打印文本或消息。还有一些其他方法,如print(), printf() etc
,用于在屏幕上书写。
我想知道这些方法实际上是如何工作的。我看一下这些方法的来源并深入研究,我发现最终write(char cbuf[], int off, int len)
方法在每个打印方法中都被调用(直接或间接),这个方法是抽象的。
那么JVM如何在屏幕上打印/写入内容。据我所知,这是JVM的内部工作。 JVM搜索显示窗口并调用OS的系统命令,例如linux和Windows OS中的echo
。
我是对的,如果没有,那么解释这些方法的工作并纠正我。
答案 0 :(得分:3)
看一下OpenJDK的来源,java.lang.System:254处的方法似乎设置了System.out
PrintStream
值,稍后会在java.lang.System:1144调用。
254: private static native void [More ...] setOut0(PrintStream out);
1144: setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));
fdOut
是对java.lang.System:1141的FileOutputStream
集的引用,
1141: FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);
而FileDescriptor.out
是
处理标准输出流。通常,不直接使用此文件描述符,而是通过称为
System.out
的输出流。
那么PrintStream
如何处理像print()
这样的方法? (你可能会看到我要去的地方。
java.io.PrintStream:582-584是print(char c)
方法,
582: public void print(char c) {
583: write(String.valueOf(c));
584: }
write()
依次写入传递的值并刷新传递给PrintStream()
的输出流。
其余的实现位是本机方法,根据定义,它们根据平台和程序的调用而变化。它们可以是从控制台屏幕到打印机的任何东西,也可以是将输出燃烧到地球表面的轨道激光。
除了幽默,我希望这有助于理解。