【问题标题】:Why do not I need to import java.lang when using Runtime?为什么我在使用 Runtime 时不需要导入 java.lang?
【发布时间】:2015-01-27 16:45:42
【问题描述】:

在下面这段代码中,为什么我需要导入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会自动为你导入呢?这是因为该包中的类对于任何 JVM 或语言本身都是必不可少的。即使是最简单的 Java 类文件也引用了几个 java.lang 类(例如,ObjectClassString),其中大约一半是实现基本语言特性所必需的(例如,Throwable、@987654329 @,以及所有的盒装类型),以及 java.lang 的大部分其余部分将被任何实际的 JVM 在加载和运行任何程序时使用(ThreadClassLoaderSystemRuntime、 ...)

标签: java


【解决方案1】:

Because

每个编译单元都会隐式导入每个公共类型名称 在预定义包java.lang中声明,如同声明 import java.lang.*;出现在每个编译单元的开头 在任何包装声明之后。 因此,所有的名字 这些类型在每个编译单元中都可以作为简单名称使用。

编译单元基本上就是你的.java源文件。

【讨论】:

    【解决方案2】:

    为方便起见,Java 编译器会自动为每个源文件导入两个完整的包:

    1. java.lang 包和
    2. 当前包(包 对于当前文件)。

    Please ref. oracle.com for more info (http://docs.oracle.com/javase/tutorial/java/package/usepkgs.html)

    【讨论】:

      猜你喜欢
      • 2018-12-17
      • 2018-03-05
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-05
      相关资源
      最近更新 更多