包与模块系统
理解 package、import、classpath、jar 打包、module-info
包与模块系统
package 和 import 是 Java 代码组织的基础,理解它们才能管理好大型项目。
学完本章你将: 理解 package、classpath、jar 打包、模块系统。
package 包
java
// 包声明必须在文件第一行
package com.example.service;
public class UserService {
public void sayHello() {
System.out.println("Hello from UserService!");
}
}
// 使用其他包的类需要 import
import java.util.List;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
List<String> names = new ArrayList<>();
names.add("Alice");
}
}
classpath 与运行
bash
# 编译(指定 classpath)
javac -d out src/com/example/*.java
# 运行
java -cp out com.example.Main
# classpath 查找顺序:
# 1. 当前目录 (.)
# 2. -cp 指定的路径
# 3. CLASSPATH 环境变量
JAR 打包
bash
# 打包为 JAR
jar -cvf myapp.jar -C out/ .
# 创建可执行 JAR(需指定主类)
jar --create --file myapp.jar --main-class com.example.Main -C out/ .
# 运行
java -jar myapp.jar
# 查看 JAR 内容
jar -tf myapp.jar
Java 模块系统(JPMS)
java
// module-info.java(Java 9+)
module com.example.myapp {
requires java.sql; // 依赖
exports com.example.api; // 导出包
opens com.example.model; // 反射开放
}
| 关键字 | 作用 |
|---|---|
| `requires` | 声明模块依赖 |
| `exports` | 导出包给其他模块使用 |
| `opens` | 允许反射访问 |