【问题标题】:How javac works while importing a package?javac 在导入包时如何工作?
【发布时间】:2019-06-22 21:48:29
【问题描述】:

我有一个疑问。
我的理解是jdk 有 [jre + 开发工具(Java、javac、调试器等)+ 源代码(src.zip)]。

现在java编译器的工作与class文件的运行无关。

如果我正在编译 .java 文件,那么 java 编译器从哪里导入包?
我可以在jre 下找到这些包。
如果我在安装jdk 时没有选择安装jre,这是否意味着我将无法编译具有import 语句的java 文件?

请帮忙。

【问题讨论】:

    标签: java jdk1.7


    【解决方案1】:

    首先,作为一个小评论,像这样的声明

    import java.util.List;
    

    只是引入了一个缩写,允许您稍后在代码中使用简单的单词List,而不是完整的类名java.util.List。因此,需要解释的不是 import 语句本身,而是像 java.util.List 这样的类的用法。

    您正确理解,为了编译您的 java 文件,编译器需要有关您使用的每个类的一些信息,并且它通常会在包含该类的某个 jar 文件中找到这些信息。

    现在,这个包含编译器读取的java.util.List 类的 jar 文件在哪里?你是对的,它来自 JRE,来自系统类路径的一部分 rt.jar(Java 编译器本身是一个需要基本类本身的 java 程序,所以无论你成功运行 javac,你总是有rt.jar 可用)。

    如果您的源代码使用了来自其他库的类,则必须在 javac 命令行中指定该库,使用类似 -cp 的选项。

    【讨论】:

    • 谢谢@Ralf。我们没有选择安装 jdk 没有 jre 吗?如果是这样,那我们可以运行java编译器吗?
    • JDK总是包含一个JRE,没有它就无法运行。可选的是额外安装一个可用于非 JDK 目的的公开可用的 JRE。
    【解决方案2】:

    Jdk = JRE + other tools like you mentioned. 当您编译 java 文件并使用 java inbuild 库时,它使用 rt.jar 来解决依赖关系,即导入语句。 您可以参考下面的链接了解区别 What is the difference between JVM, JDK, JRE & OpenJDK?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-27
      • 2018-12-22
      • 1970-01-01
      • 2018-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多