首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java实际上是如何在屏幕上打印的

java实际上是如何在屏幕上打印的
EN

Stack Overflow用户
提问于 2015-02-02 04:37:19
回答 1查看 108关注 0票数 3

我刚接触java,并且从oracle的官方java文档中学习java。在java文档提供的大多数程序示例中,system.out.println(...)语句用于打印屏幕上的文本或消息。还有一些其他的方法,比如print(), printf() etc,用于在屏幕上书写。

我想知道这些方法是如何工作的。我查看了这些方法的源代码,并深入了解,我发现最终在每个打印方法中(直接或间接)都调用了write(char cbuf[], int off, int len)方法,并且该方法是抽象的。

那么JVM如何在屏幕上打印/写入内容呢?在我看来,这是JVM的内部工作。JVM查找显示窗口并调用操作系统的系统命令,例如linux和windows操作系统中的echo

我说得对吗?如果不是,那就解释一下这些方法的工作原理,并纠正我。

EN

回答 1

Stack Overflow用户

发布于 2015-02-02 05:04:47

看一下OpenJDK的源代码,在java.lang.System:254中有一个方法似乎可以设置System.out PrintStream的值,这个值稍后在java.lang.System:1144中调用。

代码语言:javascript
运行
复制
 254:  private static native void  [More ...] setOut0(PrintStream out);

1144:  setOut0(new PrintStream(new BufferedOutputStream(fdOut, 128), true));

fdOut是对在java.lang.System:1141处设置的FileOutputStream的引用,

代码语言:javascript
运行
复制
1141:  FileOutputStream fdOut = new FileOutputStream(FileDescriptor.out);

FileDescriptor.out

标准输出流的

句柄。通常,这个文件描述符不是直接使用的,而是通过称为System.out的输出流使用的。

那么PrintStream如何处理像print()这样的方法呢?(您可能会看到我将在这里介绍的内容。

java.io.PrintStream:582-584中是print(char c)方法,

代码语言:javascript
运行
复制
 582:  public void print(char c) {
 583:      write(String.valueOf(c));
 584:  }

write()依次写入传递的值,并刷新传递给PrintStream()的输出流。

实现的其余部分是本机方法,根据定义,这些方法根据平台和程序调用的不同而有所不同。它们可以是从控制台屏幕到打印机的任何东西,也可以是将输出烧到地球表面的轨道激光。

抛开幽默不谈,我希望这有助于理解。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28267570

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档