java - 为什么 System.out.println() 中不需要 java.io.PrintStream?

标签 java java-io

所以我问自己为什么我不必导入 java.io.PrintStream 来使用 System.out。我知道 java.lang 是编译器默认导入的。好的。

因为 Systemjava.lang 的一个类,我可以使用字段 System.out。但是这个字段的类型是 java.io.PrintStream 并且默认情况下不导入这个类(它在 java.io 包中),那么为什么我可以访问 System.out.print( ) 例如不单独导入 java.io.PrintStream 吗?

如果我创建自己的类 MyClass 那么我不能做这样的事情 MyClass anInstance = new MyClass(); MyClass 需要首先导入。为什么这对于 PrintStream 不是强制性的?

提前致谢。

最佳答案

如果您需要在您的 代码中使用PrintStream(类名),您只需要导入PrintStream。在类型为 PrintStream 的另一个对象上使用字段不需要它。

import就是告诉编译器PrintStream(字面意思)在你的代码中是什么意思。这并不是告诉编译器您将使用从其他地方(在本例中为 System)获得的 PrintStream 对象。

换句话说:import就是知道如何编译源文本;这与运行时使用什么无关。例如,导入不会写入类文件;只是在运行时不需要这些信息。字段和变量定义与它们的完全限定类名一起存储,而不是相对于 import 的类名。因为 outSystem 中的类型信息表明它是 java.io.PrintStream,所以编译器(以及后来的 JVM)知道它是一个 java.io.PrintStream,无论您是否在代码中导入 PrintStream

关于java - 为什么 System.out.println() 中不需要 java.io.PrintStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50488015/

相关文章:

java - 使用 JPA 读取多个结果集

Java stream 误解......一些澄清?

java - ScheduledExecutorService 的使用和流内锁定套接字的清理

java - 关闭时未删除临时文件

Java 程序无法在 linux 中挂载的系统上写入

用于检查客户端是否可用的 Java 套接字轮询

java - 我对条件运算符做错了什么?

java - eclipse中classpath只读的一个解决方案

java - 使用 "javaw.exe"与 "java.exe"的堆大小使用情况

java - 如何在 Java 8 中使用 Spring Aspect 保留方法参数名称