javac 是做什么的 Java 编译器详解

描述:
javac 是做什么的 Java 编译器详解
精选回答

javac 是 JDK 里面自带的 Java 源代码编译器,核心作用就是把我们写好的 java 后缀源代码文件,编译转换成 JVM 可以识别的 class 字节码文件,很多初学者容易把 javac 和 java 命令搞混,java 是负责运行已经编译好的 class 程序,javac 是负责编译源码,两个命令分工完全不一样,之所以需要 javac 这个编译步骤,是因为 Java 虚拟机不能直接读取人类编写的 java 源码,必须经过编译转成字节码,这也是 Java 跨平台特性的基础,只要有对应平台的 JVM,编译出来的 class 字节码就可以在不同系统运行,javac 属于 JDK 独有的工具,只安装 JRE 是没有 javac 命令的,掌握 javac 的作用 命令格式 编译流程还有常见报错,就可以完成最基础的 Java 源码编译操作。

基础信息表

项目详细内容
命令名称javac
所属组件JDK 开发工具包
核心功能Java 源码编译为 class 字节码
输入文件xxx.java 源代码文件
输出文件xxx.class 字节码文件
配套运行命令java
JRE 是否自带不自带,只有 JDK 才有

javac 和 java 命令对比

命令作用处理对象阶段
javac编译源码java 源代码编译阶段
java执行程序class 字节码运行阶段

基础编译操作步骤

第一步 准备好 Java 源代码,文件名必须和类名保持一致,例如 HelloWorld.java

第二步 打开终端或者 cmd,切换到源码所在文件夹

第三步 输入基础编译命令 javac HelloWorld.java

第四步 执行成功之后,同目录会生成 HelloWorld.class 字节码文件

第五步 再使用 java HelloWorld 命令运行这个编译好的程序,注意运行的时候不要加 class 后缀

常用编译参数清单

encoding 指定源码编码,比如 javac -encoding UTF-8 HelloWorld.java,解决中文乱码报错

d 指定输出目录,把生成的 class 文件放到单独文件夹

classpath 指定依赖类路径,编译带有外部依赖包的源码时使用

g 生成调试信息,方便后续断点调试

verbose 显示详细编译过程,适合学习排查问题

编译完整原理说明

javac 在编译的时候,会做语法校验,检查代码有没有语法错误,比如缺少分号 类名不匹配 类型错误,如果源码存在语法错误,javac 会直接抛出编译错误,不会生成 class 文件,只有代码语法全部正确,才会输出字节码文件,字节码是平台无关的中间代码,不是机器原生指令,所以才需要 JVM 虚拟机再解释执行,这就是 Java 一次编译到处运行的核心逻辑。

常见报错原因清单

提示 javac 不是内部或外部命令,代表没有安装 JDK,或者环境变量 Path 没有配置正确

类名和文件名不一致,编译报错

源码编码不匹配,中文注释出现乱码报错

代码存在语法错误,javac 停止编译,不生成 class 文件

缺少依赖类,编译找不到引用的其他类

综合来看 javac 就是 Java 专用编译器,专门负责把 java 源码编译成 class 字节码,它是 Java 开发第一步必备工具,区分 javac 编译和 java 运行两个阶段,学会基础命令和常用参数,就可以独立完成源码编译,排查对应的编译报错。

【常见问题】

问题 1 javac 是做什么的 只装 JRE 可以用 javac 吗

回答 1 javac 是做什么的,javac 是 JDK 里面的编译工具,javac 是做什么的,单纯 JRE 只有运行 class 程序的能力,不包含 javac 命令,想要使用 javac 必须安装 JDK

问题 2 javac 是做什么的 编译之后为什么还要用 java 命令

回答 1 javac 是做什么的,javac 只负责把源码转成 class 字节码,javac 是做什么的,javac 本身不能运行程序,编译完成之后需要 java 命令加载 class 文件执行程序

问题 3 javac 是做什么的 编译报错还会生成 class 文件吗

回答 1 javac 是做什么的,如果源码存在语法错误,javac 是做什么的,javac 会终止编译,正常情况不会生成对应的 class 字节码文件

问题 4 javac 是做什么的 文件名和类名必须一样吗

回答 1 javac 是做什么的,含有 public 类的时候,文件名必须和 public 类名一致,javac 是做什么的,否则 javac 编译会直接报错

【免责申明】

本内容为 javac 基础技术教学讲解,不同 JDK 版本 javac 参数和报错提示会有细微差别,具体参数说明可以执行 javac -help 查看官方帮助文档,本内容仅作为入门学习参考。

今日大家都在搜的词: