当我们调用时,
System.out.println("aaa");
我们没有实例化 Class 的对象System
。
并且System
不是静态类。在文档中,它只说System
是public final
.
所以我的问题是为什么我们可以System
用作静态类?
当我们调用时,
System.out.println("aaa");
我们没有实例化 Class 的对象System
。
并且System
不是静态类。在文档中,它只说System
是public final
.
所以我的问题是为什么我们可以System
用作静态类?
System 类包含几个有用的类字段和方法。它不能被实例化。
System 类提供的设施包括标准输入、标准输出和错误输出流;访问外部定义的属性和环境变量;一种加载文件和库的方法;以及一种用于快速复制数组的一部分的实用方法。
如果你检查 api,它的所有方法都是静态的。而且您只是在访问它的公共字段out
...检查这个问题以获取有关何时实例化 out 的更多信息
该类不是静态的,但其中的字段和方法是静态的。您仍然可以通过这种方式调用静态方法。
因为out
是 class 上的公共静态字段System
。可以使用Type.member
语法访问静态成员。
在您的示例中,您正在调用上println()
定义的实例方法PrintStream
。调用目标是PrintStream
存储在静态字段中的实例System.out
。
System
是一个顶级的类。由于out
是静态的(不是 `System 本身),我们使用您描述的语法。
访问静态类成员的语法是
<类名>.<成员名>
请注意这与访问非静态方法或字段有何不同:
<对象名称>.<成员名称>
请注意,语法是由类成员的静态性决定的,而不是类本身的静态性。在您的示例中, 的静态性System
无关紧要;的静态out
是最重要的。