繁体   English   中英

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

[英]why java.io.PrintStream is not needed in System.out.println()?

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

因为System是一个java.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 (文字文本)在代码中的含义。 它不是告诉编译器你将使用从其他地方获得的PrintStream对象(在本例中为System )。

换句话说: import就是知道如何编译源文本; 它不是关于运行时使用的内容。 例如,导入不会写入类文件; 在运行时不需要信息。 字段和变量定义与它们的完全限定类名一起存储,而不是import -relative类。 由于在System out的类型信息是java.io.PrintStream ,编译器(以及后来的JVM)知道它是java.io.PrintStream ,无论你是否在代码中导入PrintStream

X.java

package p;
import q.Y;
public class X { Y y; }

Z.java

import p.X;

... X x = ...;
... x.y ...;

对于X的出现,编译器需要导入X.

对于xy ,编译器可以在X的类数据中找到具有Y等方法的类Y.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM