4

我是一名学习 Java 的初学者,具有一些 C++ 知识和 System.out.println(); 现在让我很困惑。所以System是类,out是可以调用方法的变量??根据: http: //journals.ecs.soton.ac.uk/java/tutorial/getStarted/application/objects.html out是类变量,变量是计算机内存中具有类型名称的存储位置和内容。它不是像字符串这样的对象,它可以使用像.getLength() 这样的方法。网站解释它的方式是 out 指的是 PrintStream 类的一个实例,但是如何呢?

4

8 回答 8

6

它不是一个对象

这就是你的推理出错的地方。System.out (对)一个对象的引用。

引用的类型是PrintStream,如Javadoc中所述。这意味着您可以PrintStream在 上调用 的方法System.out,例如:

System.out.println();
于 2012-11-06T20:43:33.823 回答
1

out不调用方法:out是一个变量,包含一个PrintStream可以调用方法的对象(的实例)。

例如 :

System.out.println("hey!");

你也可以做

void print(PrintStream ps, Object o) {
    ps.println(o);
}
...
print(System.out, "hey!");
于 2012-11-06T20:43:47.730 回答
1

Out 是名为System的类的公共静态字段

因为它是公共的,所以您可以在其上调用方法。

它的类型是PrintStream

最好的学习方法是阅读文档:

请注意顶部描述inouterr的部分。

于 2012-11-06T20:44:05.913 回答
1

更严格地说,它是一个公共静态字段,它是对 type 对象的引用PrintStream,所以是的,您可以在其上调用方法。

Java 引用大致类似于 C 指针(至少在它们的使用方式上,显然存在显着差异)。

于 2012-11-06T20:46:39.020 回答
0

System.out 是 PrintStream 的一个特定实例,其输出链接到 C++ 标准输出的等效项

于 2012-11-06T20:45:41.690 回答
0

System 是一个 final 类,它有一个 final 变量 out 保存一个 PrintStream 类的对象,我们可以在该对象上调用 println() 方法。

于 2014-02-18T19:19:24.460 回答
0

大致像这样考虑 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() 的方式

于 2017-07-20T09:54:02.990 回答
0

实际上 out 参数 inSystem.out.println(String args[])System类中的静态字段。每当声明一个字段时,它都应该具有特定的数据类型。在这个类中,out 字段定义为static PrintStream out;

这意味着out的数据类型是class。PrintStream这样System.out实际上将代表一个PrintStream类的对象。有了这个对象,我们正在调用类的println()方法PrintStream

于 2016-03-06T11:45:22.973 回答