使用 System.out.println() 的目的是啥 [关闭]

Posted

技术标签:

【中文标题】使用 System.out.println() 的目的是啥 [关闭]【英文标题】:what is the purpose of using System.out.println() [closed]使用 System.out.println() 的目的是什么 [关闭] 【发布时间】:2019-05-01 09:40:59 【问题描述】:

我正在查看System.out.println() 的内部实现。虽然我了解它是如何工作的,但无法弄清楚:

    为什么他们首先决定使用 System 类。

    他们本可以直接使用 PrintStream 包中的 PrintStream 类。

    语法className.referenceVariable.Methodname有什么意义,因为我们一般不用这个。这有什么具体原因吗?

谁能详细说明这些观点或任何相关信息会很好。

【问题讨论】:

System.out 的东西首先在 Java 1.0 之前完成。事后看来,这可能是一个错误。 如果您在类 X 中声明了一个类型为 Y 的静态变量,并希望在该变量引用的实例上调用方法 Z,则语法为 X.Y.Z()。 className.referenceVariable.Methodname 语法没有什么特别之处。 输入、输出和错误流的可用性是System 的属性,类似于环境变量。 为什么all PrintStreams 会关心系统的标准 IO 流? PrintStreams 在完全不同的数据接收器上运行(例如通用的 OutputStreams。) “直接使用PrintStream”是什么意思? System.out 和 System.err 专门的 PrintStreams。不要误解这里的抽象:System.out 是 one 特殊 PrintStream 的一个实例,但 PrintStream 与 System.out 或 err 或任何其他特定数据接收器没有关系。 【参考方案1】:

根据我的理解,System 类名是表示与运行 JVM 的 System 的任何交互。在 System Console 上执行 Read 或 Write 操作,或在 System 中读取环境变量等。

你也可以直接使用PrintStream,也没有什么坏处。但是你必须每次在你的类中创建一个PrintStream 对象并调用里面的方法来使用它。相反,它已经在 System 类中静态创建,供我们轻松使用。

至于您的第三个问题,Eran 已经在 cmets 中回答了。

【讨论】:

【参考方案2】:

System 类声明:

System 类提供的设施包括标准输入、标准输出和错误输出流;访问外部定义的属性和环境变量;一种加载文件和库的方法;以及快速复制数组的一部分的实用方法。

由于您检查了System 类的源代码,您可能已经注意到out 对象是final 并设置为null。这是setOut() 方法,它为out 变量赋值(它是本机代码)。

我知道,JVM 如何在 final 变量设置为 null 后将其设置为值,对吗?作为一个JVM有它自己的优势!

在将值分配给 out 对象之前,还会触发一个名为 checkIO 的单独方法,该方法会检查 IO 权限。

所以System 类被设计为标准输入、输出和错误流的集合。它还指示 JVM 初始化对象,例如 out 对象。

关于System.out.println()的语法,Eran已经解释过了。

【讨论】:

以上是关于使用 System.out.println() 的目的是啥 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

记录器与 System.out.println

Scala 中的 println 与 System.out.println

java中的system.out.println()和JSP中out.println()差别

system.out.println 在哪里从 JSP 打印?

java中System.out.println中的out是啥,是一个类???

Java 中 System.out.println() 的字符限制