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