JDK系列01:Java环境搭建与JDK版本区别,JDK8/11/17安装、环境变量配置全教程
🔥 本系列完整目录(20篇全集)
一、基础语法与 JDK8 核心新特性(01-05)
01、JDK系列01:Java环境搭建与JDK版本区别,JDK8/11/17安装、环境变量配置全教程
02、JDK系列02:Java内存分区详解,栈、堆、方法区、本地方法栈底层原理图解
03、JDK系列03:面向对象核心,类、对象、继承、多态、接口与抽象类深度剖析
04、JDK系列04:JDK8 Lambda表达式与函数式接口,一行代码简化集合遍历
05、JDK系列05:JDK8 Stream流式编程,集合过滤、分组、求和、去重实战案例
二、集合、IO、多线程核心源码(06-10)
06、JDK系列06:HashMap底层源码详解,扩容机制、红黑树转换、并发安全问题
07、JDK系列07:ConcurrentHashMap分段锁与CAS原理,JDK7与JDK8底层差异对比
08、JDK系列08:IO与NIO基础,BIO/NIO/AIO三种IO模型适用场景完整分析
09、JDK系列09:Java多线程基础,创建线程、锁、volatile、synchronized底层实现
10、JDK系列10:线程池ThreadPoolExecutor源码,核心参数、拒绝策略业务落地
三、JDK高版本新特性(11/17/21)(11-15)
11、JDK系列11:全新特性详解,本地变量var、HTTP Client、废弃API梳理
12、JDK系列12~13:Switch表达式、文本块Text Blocks简化字符串拼接
13、JDK系列14~15:记录类Record、密封类Sealed Class,规范化数据载体
14、JDK系列17:LTS长期支持版本,虚拟线程预览、强封装、ZGC垃圾收集器
15、JDK系列16~21:虚拟线程Virtual Thread正式版,轻量级线程解决高并发痛点
四、JVM调优、类加载、垃圾回收(16-20)
16、JDK系列16:类加载双亲委派模型,自定义类加载器打破委派实战
17、JDK系列17:垃圾回收机制,GC标记清除、复制、标记整理算法详解
18、JDK系列18:主流垃圾收集器对比,CMS、G1、ZGC、Shenandoah选型指南
19、JDK系列19:JVM调优实战,内存溢出排查、GC日志分析、核心参数配置
20、JDK系列20:JDK版本选型指南,生产环境JDK8、11、17迁移踩坑解决方案
本篇为【JDK核心进阶系列 第01篇】持续更新中,欢迎订阅专栏、收藏跟进!
文章目录
- 第01篇:Java环境搭建与JDK版本区别,JDK8/11/17安装、环境变量配置全教程
- 文章摘要
- 前言
- 一、前置基础:JDK、JRE、JVM 核心概念
- 1. 三者层级关系
- 2. 关键区分
- 3. 重要版本分界线
- 二、JDK8 / JDK11 / JDK17 全方位对比
- 2.1 LTS 支持、商用版权、项目适配总表
- 2.2 核心语法 \& 性能特性拆解
- JDK8(老项目刚需)
- JDK11(过渡折中版本)
- JDK17(2026 新项目首选)
- 2.3 精准选型指南
- 三、JDK 下载渠道(规避版权坑)
- 推荐免费商用发行版
- 避坑提醒
- 安装包格式区分
- 四、Windows10/11 完整安装 + 环境变量配置
- 4.1 安装规范硬性要求
- 4.2 图形安装包步骤
- 4.3 系统环境变量配置(核心步骤,区分系统 / 用户变量)
- ① 新建 JAVA\_HOME(必配,Maven/Tomcat/IDEA 依赖读取)
- ② 编辑 Path 变量
- ③ CLASSPATH(仅 JDK8 需要,11/17 可省略)
- 4.4 验证环境是否配置成功
- 4.5 Windows 多 JDK 共存 + 一键切换方案
- 五、MacOS 安装与永久环境变量配置(zsh/bash 双适配)
- 方式 1:Homebrew 一键安装(推荐开发)
- 方式 2:pkg 安装包手动安装
- 永久环境变量配置
- 六、Linux(Ubuntu/CentOS)服务器部署教程
- 6.1 Ubuntu 在线安装
- 6.2 离线压缩包部署(内网服务器)
- 七、开发工具适配 JDK 配置
- 7.1 IDEA 切换 JDK
- 7.2 Maven pom.xml 编译版本绑定
- 八、90% 新手高频报错 + 根治方案
- 报错 1:'java' 不是内部或外部命令
- 报错 2:javac 不是内部命令
- 报错 3:修改 JAVA\_HOME 后,java -version 版本不变
- 报错 4:JDK17 运行老框架反射报错:无法访问内部 API
- 报错 5:JDK8 项目元空间内存溢出 Metaspace OOM
- 报错 6:Mac 终端重启后 java 环境失效
- 九、全文总结
第01篇:Java环境搭建与JDK版本区别,JDK8/11/17安装、环境变量配置全教程
文章摘要
本文面向零基础后端开发者、在校学生、运维工程师,完整拆解三大主流 LTS JDK 版本选型差异,覆盖 Windows10/11、MacOS、Ubuntu/CentOS 全平台安装流程,手把手配置全局环境变量,提供多 JDK 一键切换方案,汇总 90% 新手踩坑报错修复方案,适配 SpringBoot2/3、云原生容器开发,全文实测可复现,推荐免费商用 OpenJDK 发行版,规避 Oracle 版权收费风险。
前言
Java 开发第一步就是 JDK 环境搭建,但绝大多数新手会遇到这些痛点:
分不清 JDK8/11/17 该选哪个,新项目装完 SpringBoot3 直接启动报错
环境变量配置混乱,
java命令正常、javac找不到电脑共存多个 JDK,切换版本不生效
下载 Oracle 商用 JDK,企业使用存在版权收费风险
Mac/Linux 终端配置永久失效,重启终端就要重配
读完本文你将掌握:
✅ JDK 三大 LTS 版本底层特性、适用项目场景选型标准
✅ 免费商用 OpenJDK 发行版下载渠道,规避版权问题
✅ Windows 可视化图形界面完整安装 + 系统变量配置
✅ Mac Homebrew 一键安装 + zsh/bash 永久环境变量
✅ Linux 服务器离线 / 在线两种部署方式
✅ 多 JDK 共存、一键切换开发环境方案
✅ IDEA/Eclipse/Maven 适配 JDK 版本配置
✅ 高频报错根源分析 + 一步到位修复方案
一、前置基础:JDK、JRE、JVM 核心概念
1. 三者层级关系
JDK(Java开发工具包) ├─ 开发工具:javac编译器、jdb调试、jmap性能分析工具 └─ JRE(Java运行环境) ├─ 核心类库 rt.jar、工具依赖包 └─ JVM(Java虚拟机):跨平台运行底层核心2. 关键区分
JVM:只负责运行 Java 字节码,无编译能力,底层适配 Windows/Mac/Linux
JRE:仅运行 Java 程序,无
javac编译命令,纯线上服务器可用,本地开发必须装 JDKJDK:完整开发套件,包含 JRE + 编译、诊断、打包全套工具,本地开发唯一选择
3. 重要版本分界线
JDK11 起官方移除内置独立 JRE,如需精简运行环境,必须使用jlink命令手动打包,JDK8 自带完整 JRE 目录,新手更友好。
二、JDK8 / JDK11 / JDK17 全方位对比
2.1 LTS 支持、商用版权、项目适配总表
| 对比维度 | JDK8 | JDK11 | JDK17 |
|---|---|---|---|
| 发布年份 | 2014 年 | 2018 年 | 2021 年 |
| 长期 LTS 支持 | 是(经典常青) | 是 | 是(当前新标准) |
| Oracle 商用授权 | 收费,企业商用需付费授权 | 收费 | 收费 |
| 免费推荐发行版 | Amazon Corretto8、Temurin8 | Temurin11、Corretto11 | Temurin17、Corretto17 |
| SpringBoot 最低兼容 | SpringBoot1.x/2.x 全系列 | SpringBoot2.2~2.7 | SpringBoot3.x 强制最低 JDK17 |
| 云原生容器适配 | 兼容性差,无原生 ARM 优化 | 基础支持,ZGC 实验 GC | 完整 ARM/AArch64、正式 ZGC、虚拟线程 |
| 淘汰组件 | 永久代 PermGen | Applet、WebStart、独立 JRE | 大量内部 API 强封装、废弃过时安全算法 |
2.2 核心语法 & 性能特性拆解
JDK8(老项目刚需)
Lambda 表达式、Stream 流式 API、函数式接口,现代 Java 编码基础
全新时间 API
java.time,替代旧Date线程不安全类接口默认方法、静态方法,函数式编程落地
移除 PermGen 永久代,改用 Metaspace 元空间,减少 OOM
所有遗留系统、外包项目、安卓开发唯一兼容版本
JDK11(过渡折中版本)
单文件直接运行:
java Hello.java,省去javac编译步骤,新手调试极简TLS1.3 原生支持,网络接口性能提升
ZGC 低延迟垃圾回收(实验特性,不可生产)
模块化 JPMS 完善,强隔离模块依赖
无内置 JRE,部署需手动打包,容器镜像体积更小
JDK17(2026 新项目首选)
虚拟线程 Virtual Thread:轻量级协程,百万并发,微服务高并发神器
ZGC 正式版,毫秒级 GC 停顿,线上生产直接使用
密封类 Sealed Classes,限制类继承,增强代码封装安全
Switch 模式匹配、简化
instanceof类型转换语法原生 M1/M2 Mac、ARM 服务器完美适配
严格封装内部 API,禁止非法反射,老框架启动需添加启动参数放行
2.3 精准选型指南
维护 5 年以上遗留系统、SpringBoot2 老项目、外包交付项目 →JDK8
新旧项目并行、容器迁移、不想大规模改造代码 →JDK11
全新微服务、云原生、SpringBoot3、高并发业务、个人新项目 →JDK17
三、JDK 下载渠道(规避版权坑)
推荐免费商用发行版
Eclipse Temurin(Adoptium):社区标准 OpenJDK,国内下载速度稳定,全平台安装包
Amazon Corretto:亚马逊维护,长期安全补丁,Windows 一键安装包
避坑提醒
不要下载 Oracle 官方商业 JDK,公司生产环境商用会产生高额授权费用,本地个人学习无限制。
安装包格式区分
Windows:
.exe图形安装包 /.zip绿色解压包(推荐,方便多版本共存)Mac:
.pkg安装包 /.tar.gz压缩包Linux:
.tar.gz离线压缩包、yum/apt 在线安装
四、Windows10/11 完整安装 + 环境变量配置
4.1 安装规范硬性要求
安装路径禁止中文、空格、特殊符号,标准路径示例:
JDK8:D:\Java\jdk1.8.0_391 JDK11:D:\Java\jdk-11.0.23 JDK17:D:\Java\jdk-17.0.134.2 图形安装包步骤
双击 exe 安装包,点击【下一步】
点击【更改】,自定义无中文路径,复制路径保存,后续配置使用
JDK8 会弹出独立 JRE 安装窗口,保持默认路径下一步;JDK11/17 无 JRE 步骤
等待进度条走完,点击关闭完成安装
4.3 系统环境变量配置(核心步骤,区分系统 / 用户变量)
此电脑右键 → 属性 → 高级系统设置 → 环境变量
操作系统变量(全局所有用户生效,不配置用户变量)
① 新建 JAVA_HOME(必配,Maven/Tomcat/IDEA 依赖读取)
变量名:JAVA_HOME(大小写严格固定,不能写错)
变量值:粘贴刚才保存的 JDK 根目录
② 编辑 Path 变量
双击系统变量 Path → 新建,填入:
%JAVA_HOME%\binJDK8 可额外添加%JAVA_HOME%\jre\bin,JDK11/17 无需
③ CLASSPATH(仅 JDK8 需要,11/17 可省略)
新建变量:
变量名:CLASSPATH
变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar
- 全部窗口依次点击确定保存,关闭所有已打开 CMD 终端(旧终端不会加载新变量)
4.4 验证环境是否配置成功
新开 CMD 窗口执行两条命令,同时输出版本号即成功
# 验证运行环境java-version# 验证编译器(缺失代表只装了JRE,无完整JDK)javac-version4.5 Windows 多 JDK 共存 + 一键切换方案
- 系统变量新建 3 个独立根路径变量
JAVA8_HOME=D:\Java\jdk1.8.0_391 JAVA11_HOME=D:\Java\jdk-11.0.23 JAVA17_HOME=D:\Java\jdk-17.0.13修改
JAVA_HOME值,切换对应版本路径切换后必须重启 CMD;若版本不变,将
%JAVA_HOME%\bin移动到 Path 列表最顶部,删除C:\Windows\System32自带 java 程序条目
五、MacOS 安装与永久环境变量配置(zsh/bash 双适配)
方式 1:Homebrew 一键安装(推荐开发)
# JDK8brewinstalltemurin@8# JDK11brewinstalltemurin@11# JDK17brewinstalltemurin@17方式 2:pkg 安装包手动安装
安装完成默认根路径:/Library/Java/JavaVirtualMachines/jdk-xxx.jdk/Contents/Home
永久环境变量配置
- 区分终端 shell:新版 Mac 默认 zsh,旧版 bash
# zsh编辑器vim~/.zshrc# bash编辑器vim~/.bash_profile- 写入多版本共存配置(直接复制)
# 多JDK路径定义exportJAVA8_HOME=$(/usr/libexec/java_home-v1.8)exportJAVA11_HOME=$(/usr/libexec/java_home-v11)exportJAVA17_HOME=$(/usr/libexec/java_home-v17)# 默认使用JDK17,切换修改变量名即可exportJAVA_HOME=$JAVA17_HOMEexportPATH=$JAVA_HOME/bin:$PATH- 生效配置文件
source~/.zshrc# bash执行 source ~/.bash_profile- 验证:
java -version
六、Linux(Ubuntu/CentOS)服务器部署教程
6.1 Ubuntu 在线安装
# JDK17sudoaptinstallopenjdk-17-jdk# JDK11sudoaptinstallopenjdk-11-jdk# JDK8sudoaptinstallopenjdk-8-jdk6.2 离线压缩包部署(内网服务器)
- 解压安装包至统一目录
sudotar-zxvfjdk-17_linux-x64_bin.tar.gz-C/usr/local/java/- 全局永久环境变量配置(所有用户生效)
sudovim/etc/profile写入配置:
exportJAVA_HOME=/usr/local/java/jdk-17.0.13exportPATH=$PATH:$JAVA_HOME/bin- 全局生效
source/etc/profilejava-version七、开发工具适配 JDK 配置
7.1 IDEA 切换 JDK
File → Project Structure → Project SDK,添加本机已安装 JDK,项目单独指定版本
7.2 Maven pom.xml 编译版本绑定
SpringBoot3 项目强制 JDK17 配置:
<properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties>SpringBoot2 兼容 JDK8:
<properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties>八、90% 新手高频报错 + 根治方案
报错 1:‘java’ 不是内部或外部命令
根源:JAVA_HOME 路径错误、Path 未添加 bin 目录
修复:核对路径无中文空格,Path 置顶 java 路径
报错 2:javac 不是内部命令
根源:仅安装 JRE,未装完整 JDK;环境变量缺失
修复:下载完整 JDK,重新配置 Path
报错 3:修改 JAVA_HOME 后,java -version 版本不变
Windows:删除 Path 中 C:\Windows\System32 下 java.exe、javaw.exe;将 % JAVA_HOME%\bin 上移首位
Mac/Linux:检查是否存在硬编码 java 路径覆盖配置
报错 4:JDK17 运行老框架反射报错:无法访问内部 API
启动参数添加放行配置:
--add-opens java.base/java.lang=ALL-UNNAMED报错 5:JDK8 项目元空间内存溢出 Metaspace OOM
JVM 启动参数调整元空间上限:
-XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=256m报错 6:Mac 终端重启后 java 环境失效
根源:配置写入错误文件,zsh 修改.zshrc,bash 修改.bash_profile,执行 source 生效
九、全文总结
版本选型核心:老项目 JDK8、过渡项目 JDK11、全新云原生项目 JDK17
商用优先选择 Temurin/Corretto OpenJDK,规避 Oracle 版权收费
环境变量必须配置
JAVA_HOME,适配 Maven、Tomcat、开发工具多版本共存统一设置独立 HOME 变量,一键切换开发环境
配置完成必须新开终端验证,避免缓存导致命令不生效
SpringBoot3 强制依赖 JDK17,升级项目前务必统一开发 & 生产环境 JDK 版本
