使用 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 PrintStream
s 会关心系统的标准 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() 的目的是啥 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
Scala 中的 println 与 System.out.println
java中的system.out.println()和JSP中out.println()差别
system.out.println 在哪里从 JSP 打印?