安装 JDK 并运行第一个程序

安装受支持的 JDK、验证 java/javac、编译并运行第一个程序,建立可重复的本地开发基线。

#type / howto #status / growing #tech / dev #resource / java

[!info] 关联笔记

安装 JDK 并运行第一个程序

目标

完成后应满足:

  1. java -versionjavac -version 输出同一主版本的受支持 JDK
  2. 能解释 JRE 能力与 JDK 的差别(开发需要编译器)
  3. javac 编译并 java 运行一个带 main 的类
  4. 能区分“环境坏了”与“代码错了”

这个场景为什么出现

学语法之前,必须先有一条可验证的工具链路径

  • java / javac 在 PATH 中
  • 版本可知且主版本一致
  • 能完成“源码 → 字节码 → 执行”闭环

否则后续所有报错都分不清是代码问题还是环境问题。本篇是 howto:目标不是讲完语言,而是装好、跑通、知道坏了怎么查

[!abstract] 一句话理解 安装 JDK(含编译器)→ 用 java/javac -version 验收 → 写入口类 → javac 生成 .classjava 启动 →(可选)再用构建工具包装。

最小可运行示例

先把示例放进业务场景,再看代码:

场景:新同事第一天验证本机能否提交 Java 服务改动

在拉仓库、跑 Maven 之前,先用零依赖程序证明:本机能编译、能运行、输出符合预期。
教学点:入口类、编译产物、启动器参数。

// HelloService.java
// 业务角色:模拟服务进程启动时打印就绪日志。
//
// 业务意图:
// 1. 提供 JVM 可识别的 main 入口;
// 2. 打印固定就绪文案,供环境验收脚本比对。
//
// 教学点:
// - 文件名与 public 类名一致(public class HelloService → HelloService.java);
// - javac 生成 HelloService.class;
// - java 后面跟的是“类名”,不是 .java 文件名。

public class HelloService {
    public static void main(String[] args) {
        // 就绪日志:验收时只关心这一行是否出现。
        System.out.println("hello, Java");
    }
}

建议运行:

javac HelloService.java
java HelloService

期望输出:

hello, Java

结合场景再看三个关注点

  1. JDK 必须含 javac:只有运行时、没有编译器时,你无法从源码闭环验证。
  2. java HelloService 不是 java HelloService.java(现代启动器对源码-file 模式有扩展,但本系列入门先钉死经典 class 路径)。
  3. 版本要写进团队约定:CI 与本地主版本不一致是“偶发失败”的常见根因。

核心步骤与准确模型

1. 安装受支持的 JDK

优先选择:

建议学习基线:LTS(如 17 或 21,以团队与当前时间为准)。

[!warning] 版本边界 语言笔记不把补丁号写成永久真理。安全修订优先升级;特性以 JEP/发行说明为准。

2. 验证工具链

java -version
javac -version
echo "$JAVA_HOME"
检查项期望
java可执行,主版本符合约定
javac可执行,主版本与 java 一致
JAVA_HOME指向该 JDK 根目录(许多工具依赖)

java 有而 javac 无:你可能只装了 JRE 或 PATH 指错。

3. 编译与运行模型

HelloService.java  --javac-->  HelloService.class  --java-->  进程输出
  • 编译单元.java 源文件
  • 二进制形态(默认).class 字节码
  • 启动:JVM 加载类并调用 main

4. 常见失败对照

现象优先检查
command not found: javac未装 JDK 或 PATH/JAVA_HOME
UnsupportedClassVersionError运行用的 Java 比编译用的旧
Could not find or load main class类名/包名/当前目录/工作目录不对
中文乱码终端编码与 file.encoding;另见字符串篇

5. 下一步:不要停在单文件

真实项目用 Maven/Gradle 管理多模块与测试。单文件闭环通过后进入:

工程实践

  1. 在 shell 配置中固定 JAVA_HOME,避免 GUI 安装器与终端各用各的。
  2. CI 镜像与本地使用同一发行版家族与主版本。
  3. 验收脚本同时检查 javajavac
  4. 不要从不明来源下载“绿色 JDK 包”。

可验证实验

  1. 修改输出字符串,重新 javac 后再 java,确认必须重编译才变化。
  2. javap -c HelloService(若可用)看方法字节码轮廓,建立“.class 可反查”的直觉。
  3. 在错误目录执行 java HelloService,阅读类找不到错误。

本节总结

  • 开发需要 JDK(编译器 + 运行时工具),不是只有运行时
  • 最小闭环:javacjava
  • 版本一致是跨机器可重复的第一道门

自测题

概念题

  1. 为什么本系列要求同时验证 javacjava

操作排错题

  1. 出现 UnsupportedClassVersionError 应如何处理?
  2. java HelloService.java 与经典 javac+java 教学路径如何取舍?
参考答案
  1. 只有运行时无法从源码完成编译验证;本地开发日常两者都要。
  2. 升级运行用 JRE/JDK 到 ≥ 编译版本,或用较低 --release/目标版本重新编译。
  3. 源码启动模式适合快速试验;团队基线与排障仍应理解 .class 与 classpath 模型。

延伸阅读与资料来源

资料类型支撑内容
Adoptium / Temurin发行常用 OpenJDK 构建
Java SE Documentation官方文档工具与 API
javac Tool Reference工具文档编译器行为入口
创建于 2026/7/15 更新于 2026/7/15