在命令行敲 javac Hello.java,屏幕弹出「javac 不是内部或外部命令」,程序一行没跑,先卡在编译这一步。这事八成跟环境变量有关,但要处理明白,得先把 java编译器 到底指什么搞清楚。

javac 干的事:把源码变成字节码

java编译器指的就是 javac,装 JDK 时自带,在 JDK 安装目录的 bin 文件夹里。它读取 .java 源文件,检查语法,生成 .class 字节码。真正运行字节码的是 JVM,所以编译和运行是两步:先 javac -encoding UTF-8 Hello.java,再 java Hello。加 -encoding 参数是为了避免源码里带中文注释时报编码错误。

报不是内部命令,九成是 PATH

系统提示找不到 javac,说明 PATH 环境变量里没有指向 JDK 的 bin 目录,把路径加进去后要重开命令行窗口才生效。验证用 javac -version,能输出版本号就是通了。还有一种情况是只装了 JRE 没装 JDK,那台机器上根本没有 javac,装个 JDK 就好。

版本对不上是另一个常见坑

编译能过,运行时报 UnsupportedClassVersionError,意思是用新版 JDK 编出来的字节码拿到了旧版运行环境上跑。处理办法是统一版本,或者编译时加 --release 8 这类参数,指定按旧版本的字节码格式输出,照顾那些还没升级的服务器。

用 IDE 还需要会命令行吗

IDEA、Eclipse 这类工具保存代码时自动调用内置编译器,日常确实不用手敲。但服务器上跑定时任务、排查依赖冲突、调编译参数,最后都绕不开命令行那一套,IDE 只是把它包起来了。

实际判断:装了 JDK 就有 java编译器,只有 JRE 就只能运行不能编译;遇到编译报错,按命令认不认识、编码对不对、版本齐不齐这个顺序查,多数问题十分钟内能定位。