javac是做什么的?javac是JDK里的Java编译器,主要读取以.java结尾的Java源文件,并生成以.class结尾的字节码文件。它让开发者编写的源码变成JVM可加载的编译产物,因此是Java项目从源码到可运行程序链路中的第一步。使用javac时,通常会进行语法与语义校验,并把合格源码整理成字节码,方便后续用java命令启动、打包或部署。
一、javac的主要用途清单
- 读取Java源文件:处理.java文件里的类、接口、注解、包声明和导入声明。
- 生成字节码:输出.class文件,把源码编译成JVM可识别的指令。
- 配合类路径:按`-sourcepath`和`-classpath`查找所需Java类,让多文件项目按结构完成编译。
- 适配运行环境:通过`-source`和`-target`让字节码与指定Java版本衔接。
- 支持工程化编译:可被命令行、构建工具和IDE调用,服务于Java开发流程。
二、javac的基本使用步骤
- 安装JDK,并让系统命令支持`javac`。
- 创建Java源文件,例如`Hello.java`。
- 在命令行执行:
```bash
javac Hello.java
```
- 在当前目录或`-d`指定目录生成`Hello.class`。
- 使用下面命令让JVM加载字节码并运行程序:
```bash
java Hello
```
三、javac与Java运行链路对照表
| 环节 | 命令 | 输入 | 输出 | 核心目的 |
|---|---|---|---|---|
| 编译环节 | `javac` | `.java`源文件 | `.class`字节码文件 | 把源码整理成JVM可执行形式 |
| 运行环节 | `java` | `.class`字节码文件 | 程序运行结果 | 启动JVM并执行字节码 |
| 打包环节 | `jar` | 已生成的`.class`和资源配置 | `.jar`归档包 | 便于模块分发和复用 |
四、javac常用参数清单
| 参数 | 直白说明 | 适合场景 |
|---|---|---|
| `-encoding UTF-8` | 指定源码字符集 | 项目源码采用UTF-8时 |
| `-d build/classes` | 指定`.class`输出目录 | 想把字节码集中放置时 |
| `-classpath lib` | 指定查找Java类或`.jar`的路径 | 项目引用外部类库时 |
| `-source 17` | 指定源码版本 | 项目按Java 17语法编译时 |
| `-target 17` | 指定字节码版本 | 希望产物面向Java 17运行环境时 |
| `-version` | 查看当前javac版本 | 确认JDK版本时 |
| `-help` | 查看命令帮助 | 快速浏览可用选项时 |
五、javac适合在哪些场景出现
- 学习Java基础时:用`javac`把示例源码变成`.class`。
- 开发控制台程序时:用`javac`编译单个类或多个类。
- 配置构建脚本时:让`javac`作为编译阶段命令。
- 使用IDE时:`javac`可被IDE调用,完成项目编译。
- 准备发布包时:先由`javac`生成字节码,再由`jar`归档。
六、一句话记住javac是做什么的
javac是Java源码的编译器:输入`.java`,输出`.class`;它把开发者编写的代码整理成JVM可加载的字节码,是Java程序从编写走向运行的关键工具。
【常见问题】
问题1:javac是做什么的?
回答1:javac是Java编译器,主要把`.java`源文件转换成`.class`字节码文件。想了解javac是做什么的,可以把它看作Java源码进入运行链路前的编译入口。
问题2:javac和java命令分别做什么的?
回答2:javac承担编译工作,java承担运行工作。javac是做什么的,重点在把源码变成字节码;java则让JVM加载字节码并执行程序。
问题3:IDE里还需要javac是做什么的吗?
回答3:需要。IDE里通常会调用`javac`完成源码编译。javac是做什么的,在IDE中体现为把项目中的`.java`文件转换成可运行字节码。
问题4:javac是做什么的可以一次编译多个文件吗?
回答4:可以。`javac`支持单个`.java`文件和多个`.java`文件一起编译。javac是做什么的,在这里就是按文件列表生成对应的`.class`字节码。
问题5:多模块项目里javac是做什么的?
回答5:多模块项目中,`javac`用于把各模块源码编译成字节码,再由构建工具组织所需类和打包。理解javac是做什么的,可以把它看成模块编译阶段的执行器。
免责声明:本文围绕javac是做什么的进行整理,用于Java学习参考;具体参数和版本行为以所用JDK文档为准。


