javac 在导入包时如何工作?

How javac works while importing a package?

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

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

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

请帮忙

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

首先,作为一个次要的评论,像

这样的声明
import java.util.List;

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

您理解正确,要编译您的 java 文件,编译器需要您使用的每个 class 的一些信息,并且它通常会在包含 [=33] 的某个 jar 文件中找到此信息=].

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

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