Javac 参考文档 #
1. 什么是 Javac #
Javac 是 Java 编程语言的编译器,负责将 Java 源代码文件(.java)编译为 Java 字节码文件(.class)。它是 Java Development Kit (JDK) 的核心工具之一,位于 JDK 安装目录的 bin 文件夹中。
2. 基本用法 #
2.1 简单编译 #
bash
javac HelloWorld.java
这将把 HelloWorld.java 编译为 HelloWorld.class 文件。
2.2 编译多个文件 #
bash
javac File1.java File2.java File3.java
或使用通配符:
bash
javac *.java
2.3 指定输出目录 #
使用 -d 选项指定编译后的 .class 文件输出目录:
bash
javac -d ./classes HelloWorld.java
3. 常用选项 #
3.1 类路径相关 #
| 选项 | 描述 |
|---|---|
-cp 或 -classpath |
指定编译时查找类文件的路径 |
-sourcepath |
指定查找源文件(.java)的路径 |
-bootclasspath |
指定引导类加载器使用的类路径 |
-extdirs |
指定扩展类的目录 |
3.2 编译选项 #
| 选项 | 描述 |
|---|---|
-d <directory> |
指定输出目录 |
-encoding <encoding> |
指定源文件的字符编码 |
-source <release> |
指定使用的源文件版本 |
-target <release> |
指定生成的类文件的目标版本 |
-version |
显示编译器版本信息 |
-help |
显示帮助信息 |
3.3 调试与优化 #
| 选项 | 描述 |
|---|---|
-g |
生成所有调试信息 |
-g:none |
不生成调试信息 |
-g:{lines,vars,source} |
只生成指定的调试信息 |
-O |
启用优化(已过时,由 JVM 自动优化) |
4. 高级功能 #
4.1 使用模块 #
Java 9+ 支持模块系统,使用 --module-path 和 --add-modules 选项:
bash
javac --module-path ./lib -d ./classes --add-modules java.sql MyApp.java
4.2 注解处理 #
使用 -processor 选项指定注解处理器:
bash
javac -processor com.example.MyProcessor MyClass.java
4.3 增量编译 #
Javac 默认支持增量编译,只编译修改过的文件。可以使用 -Xprefer:newer 选项优化增量编译行为。
5. 示例 #
5.1 基本编译示例 #
bash
# 编译单个文件
javac HelloWorld.java
# 运行程序
java HelloWorld
5.2 使用类路径编译 #
bash
# 编译依赖于外部 JAR 的程序
javac -cp ./lib/commons-lang3.jar MyProgram.java
# 运行程序
java -cp ./lib/commons-lang3.jar:. MyProgram
5.3 编译并打包 JAR #
bash
# 编译到 classes 目录
javac -d ./classes *.java
# 创建 JAR 文件
jar cvf myapp.jar -C ./classes .
# 运行 JAR
java -jar myapp.jar
6. 编译错误常见类型 #
6.1 语法错误 #
text
HelloWorld.java:5: error: ';' expected
System.out.println("Hello World")
^
1 error
6.2 类型错误 #
text
HelloWorld.java:5: error: incompatible types: int cannot be converted to String
String message = 123;
^
1 error
6.3 未找到类错误 #
text
HelloWorld.java:3: error: cannot find symbol
System.out.println("Hello World");
^
symbol: variable out
location: class System
1 error
7. 最佳实践 #
- 使用构建工具:对于复杂项目,建议使用 Maven、Gradle 等构建工具代替直接使用 javac
- 设置 CLASSPATH:合理设置类路径,避免类冲突
- 指定编码:始终使用
-encoding选项指定源文件编码(如 UTF-8) - 版本控制:使用
-source和-target选项控制 Java 版本兼容性 - 模块化设计:Java 9+ 中使用模块系统管理依赖
8. 命令行帮助 #
要查看完整的命令行选项列表,使用:
bash
javac -help
或查看详细文档:
bash
javac -X
9. 总结 #
Javac 是 Java 开发的基础工具,掌握其基本用法和常用选项对于 Java 程序员至关重要。虽然现代构建工具(如 Maven、Gradle)通常会隐藏底层的 javac 调用,但了解其工作原理仍有助于解决复杂的编译问题和优化构建过程。
最后更新:2026-02-05