0

当我们System.out.println()在java中声明要在屏幕上输出一些东西的时候。在这个声明System中是类,out是那个类的对象,是那个类println()的方法。

当我们在类 B 中声明类 A 的实例或对象时,使用A object;以下语法, object.method(argument).

现在我的问题是为什么我们不能在下面的语法中声明out类的对象 , 。SystemSystem out = new System();

4

4 回答 4

4

在此语句中,“System”是类,“out”是该类的对象,

不,out是. _ System它是一个返回对 a 的引用的字段PrintStream。它不是System. _ 所以你可以使用:

PrintStream stream = System.out;
stream.println("Foo");

(顺便说一句,区分类、对象、字段、引用等很重要。花一些时间来正确理解术语确实可以帮助您正确理解它。)

于 2013-08-01T16:01:23.817 回答
2

System有一个您无法访问的私有构造函数:

64    private System() {
65    }

来源

如果System out = new System()你试图重新分配System.out......那么你也不能这样做,因为outisfinal并且因此在它被初始化后不能被重新分配(更不用说它是 type PrintWriter,而不是 not System)。

于 2013-08-01T16:00:48.810 回答
1

您误解了 Java 语法的工作原理。在System.out中,System是一个类。点运算符意味着它out是该类的成员(在这种情况下是变量,而不是方法,因为没有括号),而不是它的实例。out是 type 的对象,PrintStream实际上您可以创建PrintStreams 的新实例(例如通过打开文件进行写入)。

System恰好是一个特殊的 Java 类,您无法自己实例化。对于大多数类,您可以使用您描述的语法: Car myCar = new Car();

于 2013-08-01T16:01:54.477 回答
0

out – 属于static member fieldSystem,属于 PrintStream类型。它的访问说明符是public final.

这在启动期间被实例化,并与主机的标准输出控制台映射。

看看它怎么运作

于 2013-08-01T16:02:09.780 回答