在Java中,System.out如何引用PrintStream类?

时间:2012-11-06 20:42:27

标签: java

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

8 个答案:

答案 0 :(得分:6)

  

这不是一个对象

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

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

System.out.println();

答案 1 :(得分:1)

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

例如:

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

您也可以

void print(PrintStream ps, Object o) {
    ps.println(o);
}
...
print(System.out, "hey!");

答案 2 :(得分:1)

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

因为它是公开的,你可以在上面调用方法。

其类型为 PrintStream

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

请注意顶部的部分,它描述了 out 错误中的

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

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

这意味着out的数据类型为PrintStream class。这样System.out实际上代表PrintStream类的对象。使用此对象,我们调用println()类的PrintStream方法。

答案 7 :(得分:0)

将System类大致如下所示:

package java.lang;
public final class System {

    public final static PrintStream out;
}

这里是“type”Printstream的静态最终变量。 由于它是一个静态变量,我们可以通过“ClassName.variableName”调用它而不创建System类的任何对象,所以我们做System.out。

现在,out是“PrintStream”类的引用变量。到目前为止,只创建了这个引用变量,它并没有引用Printstream类的任何“对象”。 但是,当SystemStream加载到内存中时,它会创建PrintStream的对象。 为此,请参阅下面链接中的方法initializeSystemClass()setOut0(),这是System类的完整源代码。 (不要被这个巨大的代码所淹没,只要确保在系统内部有一个“新的PrintStream()”(这里是1095行))。

http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/lang/System.java

所以,当我们有一个PrintStream类的对象时,我们的out引用变量可以很容易地调用它上面的方法,对吧?这就是我们调用System.out.println()

的方式