为什么在使用Runtime时不需要导入java.lang?
在下面的代码段中,为什么我需要导入为什么在使用Runtime时不需要导入java.lang?,java,Java,在下面的代码段中,为什么我需要导入java.awt.Robot,但我可以使用Runtime而不导入java.lang.Runtime package classes; import java.awt.Robot; public class RuntimeExecution { public static void main(String[] args) { try { Runtime.getRuntime().exec("notepad");
java.awt.Robot
,但我可以使用Runtime
而不导入java.lang.Runtime
package classes;
import java.awt.Robot;
public class RuntimeExecution {
public static void main(String[] args) {
try {
Runtime.getRuntime().exec("notepad");
Robot robot = new Robot();
robot.keyPress(65);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
每个编译单元隐式导入每个公共类型名
在预定义的包java.lang
中声明,就像声明
import java.lang.*代码>出现在每个编译单元的开头
在任何包声明之后立即因此,所有
这些类型在每个编译单元中都有简单的名称。
编译单元基本上是您的.java
源文件。为了方便起见,java编译器会自动为每个源文件导入两个完整的包:
java.lang包和
当前程序包(该程序包)
对于当前文件)
下面的答案是正确的,但为什么java.lang会自动为您导入?这是因为该包中的类对于任何JVM都是必不可少的,或者对于语言本身也是必不可少的。即使是最简单的Java类文件也引用了几个Java.lang类(例如,对象
,类
,字符串
),其中大约一半是实现基本语言功能所必需的(例如,可丢弃
,可替换
,以及所有装箱类型),任何实际的JVM在加载和运行任何程序(线程
,类加载器
,系统
,运行时
,…)时,都会使用java.lang的大部分剩余部分