当我们在java中声明System.out.println()
时,在屏幕上输出内容。
在此语句中System
是类,out
是该类的对象,println()
是该类的方法。
当我们在B类中声明一个实例或对象时,假设是A类,然后使用以下语法A object;
,然后如果该类的任何方法已被声明为public,然后在以下语法中调用方法object.method(argument)
。
现在我的问题是,我们无法使用以下语法out
声明类System
的对象System out = new System();
。
答案 0 :(得分:4)
在本声明中,“System”是类,“out”是该类的对象,
不,out
is a static field within System
。这是一个返回PrintStream
引用的字段。它是不是 System
的实例。所以你可以使用:
PrintStream stream = System.out;
stream.println("Foo");
(顺便区分类,对象,字段,引用等很重要。花一些时间来使术语正确可以真正帮助你正确理解它。)
答案 1 :(得分:2)
System
有一个您无法访问的私有构造函数:
64 private System() {
65 }
(source)
如果按System out = new System()
您尝试重新分配System.out
...那么您也不能这样做,因为out
是final
因此无法重新分配在初始化之后(更不用说它是PrintWriter
类型,而不是System
)。
答案 2 :(得分:1)
您误解了Java语法的工作原理。在System.out
中,System
是一个类。点运算符意味着out
是该类的成员(在这种情况下是变量,而不是方法,因为没有括号),而不是它的实例。 out
是PrintStream
类型的对象,实际上您可以创建PrintStream
的新实例(例如通过打开文件进行写入)。
System
碰巧是一个特殊的Java类,你无法自己实例化。对于大多数类,您可以使用您描述的语法:
Car myCar = new Car();
答案 3 :(得分:0)
out - 是System类的static member field
,类型为PrintStream。其访问说明符为public final
。
这在启动期间实例化,并使用主机的标准输出控制台进行映射。