我不确定我是否理解正确:java.base
是所有其他模块的基础基础模块,包含它们的所有基础内容,就像类的父类(super class)一样。 java.se
是包含整个 JDK 的模块,就像一个子类(包含基本功能和更具体的东西)
最佳答案
java.base
是基础模块;所有其他模块都隐式或显式地依赖于它:
If the declaration of a module does not express a dependence on the
java.base
module [...] then the module has an implicitly declared dependence on thejava.base
module.
( Java Language Specification 17 §7.7.1 )
java.se
“定义 Java SE 平台的 API”(根据文档)。它大致(?)包含模块化之前 Java SE 中存在的所有类,除了现在被分离在不同的模块中,例如java.desktop
或 java.sql
。它不包括 JDK 特定模块(例如 jdk.javadoc
)。 Java 运行时可能不一定提供所有这些模块;例如你可以使用 jlink
创建一个仅包含您需要的模块的 Java 运行时(至少 java.base
)。
Java API 规范也有助于理解模块的内容及其关系:
您与类(模块 java.base
)及其子类(模块 java.se
)的比较在这种情况下有效,因为 java.se
有点像一个“聚合器”模块,它本身不包含或导出任何包,但仅通过 requires transitive
间接导出。参见 this question为什么存在 java.se
模块。虽然通常你不会声明对 java.se
的依赖,因为这违背了制作自定义小运行时图像的目的;相反,您只会声明对您真正需要的特定模块的依赖性,例如java.logging
.
虽然这样的聚合器模块并不常见。在大多数情况下,模块更适合用于对相关包进行分组,并限制对内部实现的访问。然而,在这些情况下,由一个模块和相应的服务提供者定义的服务正在实现和declared by another module和你的比喻类似。
关于java - Java平台模块系统中的 'java.se'和 'java.base'模块有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71482750/