我是一名学习 Java 的初学者,具有一些 C++ 知识和 System.out.println(); 现在让我很困惑。所以System是类,out是可以调用方法的变量??根据: http: //journals.ecs.soton.ac.uk/java/tutorial/getStarted/application/objects.html out是类变量,变量是计算机内存中具有类型名称的存储位置和内容。它不是像字符串这样的对象,它可以使用像.getLength() 这样的方法。网站解释它的方式是 out 指的是 PrintStream 类的一个实例,但是如何呢?
8 回答
它不是一个对象
这就是你的推理出错的地方。System.out
是(对)一个对象的引用。
引用的类型是PrintStream
,如Javadoc中所述。这意味着您可以PrintStream
在 上调用 的方法System.out
,例如:
System.out.println();
out
不调用方法:out
是一个变量,包含一个PrintStream
可以调用方法的对象(的实例)。
例如 :
System.out.println("hey!");
你也可以做
void print(PrintStream ps, Object o) {
ps.println(o);
}
...
print(System.out, "hey!");
Out 是名为System的类的公共静态字段。
因为它是公共的,所以您可以在其上调用方法。
它的类型是PrintStream。
最好的学习方法是阅读文档:
请注意顶部描述in、out和err的部分。
更严格地说,它是一个公共静态字段,它是对 type 对象的引用PrintStream
,所以是的,您可以在其上调用方法。
Java 引用大致类似于 C 指针(至少在它们的使用方式上,显然存在显着差异)。
System.out 是 PrintStream 的一个特定实例,其输出链接到 C++ 标准输出的等效项
System 是一个 final 类,它有一个 final 变量 out 保存一个 PrintStream 类的对象,我们可以在该对象上调用 println() 方法。
大致像这样考虑 System 类:
package java.lang;
public final class System {
public final static PrintStream out;
}
这里是“类型”Printstream 的静态最终变量。由于它是静态变量,我们可以通过“ClassName.variableName”来调用它,而不需要创建任何System类的对象,所以我们做System.out。
现在,out 是“PrintStream”类的引用变量。到目前为止,只创建了这个引用变量,它没有引用 Printstream 类的任何“对象”。但是 System 类在加载到内存时会创建 PrintStream 的对象。为此,请参阅方法initializeSystemClass()
和setOut0()
下面的链接,这是 System 类的完整源代码。(不要被这个庞大的代码压倒,只要确保在 System 内部调用了“new PrintStream()”(此处为第 1095 行))。
http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/System.java
所以,当我们有一个 PrintStream 类的对象时,我们的 out 引用变量可以很容易地调用它的方法,对吧?这就是我们调用 System.out.println() 的方式
实际上 out 参数 inSystem.out.println(String args[])
是System
类中的静态字段。每当声明一个字段时,它都应该具有特定的数据类型。在这个类中,out 字段定义为static PrintStream out;
。
这意味着out的数据类型是class。PrintStream
这样System.out
实际上将代表一个PrintStream
类的对象。有了这个对象,我们正在调用类的println()
方法PrintStream
。