Java中System.out.println()中的System、out、println分别是什么意思?

39
我在寻找Java中System.out.println()中的Systemoutprintln是什么意思。我进行了搜索并发现了以下不同的答案: 可能重复:
Java中System.out.println的含义是什么?

  • System是java.lang包中的内置类。 此类具有final修饰符,这意味着它不能被其他类继承。 它包含预定义的方法和字段,提供标准输入、输出等功能。

  • out是System类中的静态final字段(即变量),其类型为PrintStream(一个内置类,包含打印不同数据值的方法)。 静态字段和方法必须使用类名访问,因此使用System.out。

  • 这里的out表示PrintStream类的引用变量。

  • println()是PrintStream类中的公共方法,用于打印数据值。 因此,要访问PrintStream类中的方法,我们使用out.println()(因为非静态方法和字段只能通过引用变量访问)

在另一页中,我找到了另一个相反的定义:

System.out.print是Java中使用的标准输出函数。其中System指定包名称,out指定类名称,print是该类中的函数。

我对这些感到困惑。有人能够准确告诉我它们是什么吗?

1
请查看以下两个链接:https://dev59.com/0nA75IYBdhLWcg3wOWVd 和 http://stackoverflow.com/q/10004856/396730。 - Philipp Wendler
8
第二个解释是完全错误的。 - Philipp Wendler
1
我同意你们两个的看法,将其标记为第一个问题的重复。 - Andrzej Doyle
@sylvainulg:那行不通。 - Joachim Sauer
这是一个简短的视频解释,链接为 https://youtu.be/tFDxh3BHmm4。 - VedantK
显示剩余4条评论
3个回答

115

Systemjava.lang包中的一个最终类。

out是在System类中声明的PrintStream类型的类变量。

printlnPrintStream类的一个方法。


11

每当你感到困惑时,我建议首先查阅Javadoc以获得澄清。

从关于System的javadoc中,以下是文档内容:

public final class System
extends Object

The System class contains several useful class fields and methods. It cannot be instantiated.
Among the facilities provided by the System class are standard input, standard output, and error output streams; access to externally defined properties and environment variables; a means of loading files and libraries; and a utility method for quickly copying a portion of an array.

Since:
JDK1.0

关于System.out

public static final PrintStream out
The "standard" output stream. This stream is already open and ready to accept output data. Typically this stream corresponds to display output or another output destination specified by the host environment or user.
For simple stand-alone Java applications, a typical way to write a line of output data is:

     System.out.println(data)

1
查阅Javadoc是可以的,但前提是你理解它们在说什么。但如果你不理解呢?例如,新手可能不理解标准输出、错误输出流的概念,以及流已经打开并准备好接受输出数据。当然,新手可以通过谷歌搜索这些概念,但这通常会导致他不断遇到新的概念,而且还是无法理解的。我并不是说Javadocs有什么问题。我只是指出新手可能会遇到的困难。这就是为什么他经常转向SO,在那里用他能理解的语言得到解释的原因。 - Bob Ueland
@BobUeland:在我看来,当你不理解某些东西时,最好的方法是查看它的文档,而不是查看其他人对同一事物的解释。当人们用自己的话解释官方文件时,有时会导致混淆。我的意思是,有很多方法可以用自己的话解释同一件事情,如果有很多答案,那么混淆的可能性就很高。 - Sujay
我同意你的观点,但是那些不理解文档的新手需要像这样的东西:“看看System.out.println()。第一个单词首字母大写,所以它是一个类。第三个单词有括号,所以它是一个方法。第二个单词首字母小写且没有括号,所以它是一个字段。你想打印一些东西,但必须找到能够为你完成工作的人。你不认识那个人,但你知道System,它有一个称为out的字段,指向那个人。所以你知道System.out指向那个人,而且你知道这个人有println()方法。 - Bob Ueland

8
你发布的第一个答案(System是内置类...)非常准确。
你可以补充说明,System类包含大量本地代码,这是JVM在启动过程中设置的,例如将System.out打印流连接到与“标准输出”(控制台)相关联的本地输出流。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接