module-info.java
声明模块
module-info.java 是 CoddyKit 上的免费 Java Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Java Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Java Academy 课程共包含 4 节课。
模块系统
Java 平台模块系统(JPMS)于 Java 9 引入,它可以将包组织成具有明确依赖关系和边界的命名模块。
模块声明位于一个特殊文件中:module-info.java。
为什么需要模块
在模块出现之前,类路径只是由 Java 归档包组成的扁平、无结构集合。任何代码都可以访问任意公开类,而缺失的依赖项只有在运行时才会暴露。
模块增加了强封装和可靠配置,并在编译和启动时进行验证。
module-info 的位置
module-info.java 位于源代码树的根目录中,在各个包目录之上。它会编译为模块根目录中的 module-info.class。
每个模块中恰好有一个这样的文件。
最小声明
最简单的模块只需要一个名称。按照惯例,模块名采用反向 DNS 形式,就像包名一样。
module com.example.app {
}声明依赖关系
使用 requires 依赖另一个模块。每个模块都会隐式依赖 java.base,因此您无需声明它。
module com.example.app {
requires java.sql;
requires java.logging;
}公开一个包
默认情况下,模块中的包是隐藏的。使用 exports 可让其他模块看到某个包的公开类型。
module com.example.app {
exports com.example.app.api;
}强封装
任何未使用 export 导出的包,从外部都是完全不可访问的,即使其中包含公共类也是如此。这正是它与类路径环境的重大区别。
内部包会在 JVM 的强制约束下保持内部状态。
模块命名规则
模块名称遵循与包相同的词法规则:使用点分隔的标识符。请选择稳定且全局唯一的名称,因为其他模块会通过名称依赖它。
重命名模块会对其使用方造成不兼容变更。
更完整的示例
实际的声明会同时使用依赖声明和导出声明。此模块依赖日志记录功能,并且只公开其公共应用程序接口包。
module com.example.orders {
requires java.logging;
requires com.example.payments;
exports com.example.orders.api;
}编译模块
您需要使用支持模块的选项进行编译。--module-source-path 和 -d 选项会告诉编译器源代码和输出所在的位置。
javac -d out --module-source-path src $(find src -name '*.java')java --module-path out --module com.example.app/com.example.app.Main
模块路径
模块会从模块路径(--module-path)中解析,这是类路径的模块化继任者。启动器会在运行前读取每个模块的描述符,以构建依赖关系图。
快速检查
请回忆包的默认可见性。
回顾
您已经学习了 module-info.java 的基础知识:
- 每个模块在源代码根目录中有一个描述符
requires声明依赖关系;java.base会被隐式依赖exports公开一个包;其他所有内容都会被封装- 使用
--module-path和--module进行构建和运行
下一步:深入了解依赖声明和导出指令。
常见问题解答
「module-info.java」课时是免费的吗?
是的 — 「module-info.java」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Java Academy 课程的其余内容,请升级到 CoddyKit PRO。 Java Academy 课程共包含 4 节课。
「module-info.java」这节课中我会学到什么?
声明模块 你通过在浏览器中直接运行的动手代码来练习 Java Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Java Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Java Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「module-info.java」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Java Academy 课中编写并运行代码吗?
能。每节 Java Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- module-info.java
- requires 与 exports
- 使用 provides/uses 提供服务
- 迁移到模块