我刚接触java,并且从oracle的官方java文档中学习java。在java文档提供的大多数程序示例中,system.out.println(...)语句用于打印屏幕上的文本或消息。还有一些其他的方法,比如print(), printf() etc,用于在屏幕上书写。
我想知道这些方法是如何工作的。我查看了这些方法的源代码,并深入了解,我发现最终在每个打印方法中(直接或间接)都调用了write(char cbuf[], int off, int len)方法,并且该方法是抽象的。
那么JVM如何在屏幕上打印/写入内容呢?在我看来,这是JVM的内部工作。JVM查找显示窗口并调用操作系统的系统命令,例如linux和windows操作系统中的echo。
我说得对吗?如果不是,那就解释一下这些方法的工作原理,并纠正我。
发布于 2015-02-02 05:04:47
看一下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()的输出流。
实现的其余部分是本机方法,根据定义,这些方法根据平台和程序调用的不同而有所不同。它们可以是从控制台屏幕到打印机的任何东西,也可以是将输出烧到地球表面的轨道激光。
抛开幽默不谈,我希望这有助于理解。
https://stackoverflow.com/questions/28267570
复制相似问题