“Java 模块(Module)”通常指 Java 9 引入的 JPMS(Java Platform Module System),用来更清晰地管理依赖和封装。下面从概念 → 使用步骤 → 示例 → 常见问题给你讲清楚。
在 Java 9 之前,所有类都在 classpath 上,互相可见,容易出问题。
Java 模块通过 module-info.java 明确:
推荐结构:
myapp/
├─ src/
│ ├─ com.example.main/
│ │ ├─ module-info.java
│ │ └─ com/example/main/Main.java
│ └─ com.example.util/
│ ├─ module-info.java
│ └─ com/example/util/StringUtils.java
module com.example.util {
exports com.example.util;
}
module com.example.main {
requires com.example.util;
}
package com.example.util;
public class StringUtils {
public static String hello() {
return "Hello Module";
}
}
package com.example.main;
import com.example.util.StringUtils;
public class Main {
public static void main(String[] args) {
System.out.println(StringUtils.hello());
}
}
javac \
-d out \
src/com.example.util/module-info.java \
src/com.example.util/com/example/util/*.java \
src/com.example.main/module-info.java \
src/com.example.main/com/example/main/*.java
java --module-path out --module com.example.main/com.example.main.Main
module 模块名 {
requires 模块名; // 依赖
exports 包名; // 导出包
opens 包名; // 反射可见
uses 接口; // 服务接口
provides 接口 with 实现;
}
✅ 不导出的包 无法被其他模块访问
✅ 反射访问需要 opens
✅ 模块名一般和包名一致
✅ Java 标准库本身也是模块(如 java.base)
✅ 大型项目 / 框架
✅ 微服务 / 工具库
✅ 想严格控制依赖
❌ 小练习 / 简单程序 → 不用模块也行
如果你愿意,我可以:
你现在是 学习阶段还是项目要用?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。