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
等选项指定该库。
我有疑问。
我的理解是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
等选项指定该库。