Java 中默认导入的包是哪个?

2025年4月26日 | 阅读 2 分钟

Java中,是Java类和接口的集合。当我们使用某个特定中的类时,我们需要在代码中导入该类所在的特定包。类将使用其完全限定名,该名称包含包名。在大多数基本的Java程序中,我们不会导入任何包。这里就产生了一个问题:当我们不导入任何包时,Java程序是如何允许我们使用特定包中定义的类的呢?JVM 内部通过默认导入 java.lang 包来解决这个问题

java.lang 包

Java 编译器默认内部导入 java.lang 包。它提供了设计基本Java程序所需的基本类。其中重要的类包括 Object,它是类层次结构的根;以及 Class,它的实例在运行时代表类。

让我们创建一个查找数字是偶数还是奇数的Java程序。在这个程序中,我们没有导入任何包。

FindEvenOdd.java

输出

87 is odd number.

请看上面的程序,我们没有导入任何包。尽管如此,我们还是使用了String类。然而,我们必须在程序顶部写下类的完全限定名,后面跟着import关键字。但我们并没有这样做。这是因为 Java 编译器默认导入java.lang包,而String类就定义在这个包中。

如果我们想检查这是不是真的,我们可以反编译这个 Java 程序。如果你不知道如何手动反编译 Java 程序,请访问链接 java-decompiler 或使用在线 Java 反编译器 http://www.javadecompilers.com/upload/processfile. 我们反编译了上面的 Java 程序,发现java.io.PrintStream包是默认导入的。导入 PrintStream 类的层级结构如下:

Which Package is Imported by Default in Java?

该层级结构表明,java.lang包中的Object类是默认导入的。这意味着 java.lang 包是默认导入的,但不会显示给用户。

反编译上面的程序后,程序看起来如下:

因此,我们不需要显式导入 java.lang 包。在不导入 java.lang 包的情况下,我们也可以在 Java 程序中使用该包中的类。