java - 导入包时 javac 如何工作?

标签 java jdk1.7

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

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

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

请帮忙。

最佳答案

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

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 等选项指定该库。

关于java - 导入包时 javac 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54426608/

相关文章:

java - 使用工作流引擎、状态机引擎还是自己动手?

Java NoSuchMethodException - 类中确实存在方法

java - 为什么java中的数据类型不是对象?

java - 使用泛型在类上实现 equals 时避免警告

JavaFX 和 Swing 性能问题

java - 启动java应用程序

Java 属性驱动集合

java - 为什么在 java 6 和 java 7 中获取字符 ®(U+00AE) 不同?

java-javaagent : printing java command use guidelines