当前位置: 首页 > news >正文

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 环境搭建,但绝大多数新手会遇到这些痛点:

  1. 分不清 JDK8/11/17 该选哪个,新项目装完 SpringBoot3 直接启动报错

  2. 环境变量配置混乱,java命令正常、javac找不到

  3. 电脑共存多个 JDK,切换版本不生效

  4. 下载 Oracle 商用 JDK,企业使用存在版权收费风险

  5. 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编译命令,纯线上服务器可用,本地开发必须装 JDK

  • JDK:完整开发套件,包含 JRE + 编译、诊断、打包全套工具,本地开发唯一选择

3. 重要版本分界线

JDK11 起官方移除内置独立 JRE,如需精简运行环境,必须使用jlink命令手动打包,JDK8 自带完整 JRE 目录,新手更友好。

二、JDK8 / JDK11 / JDK17 全方位对比

2.1 LTS 支持、商用版权、项目适配总表

对比维度JDK8JDK11JDK17
发布年份2014 年2018 年2021 年
长期 LTS 支持是(经典常青)是(当前新标准)
Oracle 商用授权收费,企业商用需付费授权收费收费
免费推荐发行版Amazon Corretto8、Temurin8Temurin11、Corretto11Temurin17、Corretto17
SpringBoot 最低兼容SpringBoot1.x/2.x 全系列SpringBoot2.2~2.7SpringBoot3.x 强制最低 JDK17
云原生容器适配兼容性差,无原生 ARM 优化基础支持,ZGC 实验 GC完整 ARM/AArch64、正式 ZGC、虚拟线程
淘汰组件永久代 PermGenApplet、WebStart、独立 JRE大量内部 API 强封装、废弃过时安全算法

2.2 核心语法 & 性能特性拆解

JDK8(老项目刚需)
  1. Lambda 表达式、Stream 流式 API、函数式接口,现代 Java 编码基础

  2. 全新时间 APIjava.time,替代旧Date线程不安全类

  3. 接口默认方法、静态方法,函数式编程落地

  4. 移除 PermGen 永久代,改用 Metaspace 元空间,减少 OOM

  5. 所有遗留系统、外包项目、安卓开发唯一兼容版本

JDK11(过渡折中版本)
  1. 单文件直接运行:java Hello.java,省去javac编译步骤,新手调试极简

  2. TLS1.3 原生支持,网络接口性能提升

  3. ZGC 低延迟垃圾回收(实验特性,不可生产)

  4. 模块化 JPMS 完善,强隔离模块依赖

  5. 无内置 JRE,部署需手动打包,容器镜像体积更小

JDK17(2026 新项目首选)
  1. 虚拟线程 Virtual Thread:轻量级协程,百万并发,微服务高并发神器

  2. ZGC 正式版,毫秒级 GC 停顿,线上生产直接使用

  3. 密封类 Sealed Classes,限制类继承,增强代码封装安全

  4. Switch 模式匹配、简化instanceof类型转换语法

  5. 原生 M1/M2 Mac、ARM 服务器完美适配

  6. 严格封装内部 API,禁止非法反射,老框架启动需添加启动参数放行

2.3 精准选型指南

  1. 维护 5 年以上遗留系统、SpringBoot2 老项目、外包交付项目 →JDK8

  2. 新旧项目并行、容器迁移、不想大规模改造代码 →JDK11

  3. 全新微服务、云原生、SpringBoot3、高并发业务、个人新项目 →JDK17

三、JDK 下载渠道(规避版权坑)

推荐免费商用发行版

  1. Eclipse Temurin(Adoptium):社区标准 OpenJDK,国内下载速度稳定,全平台安装包

  2. 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.13

4.2 图形安装包步骤

  1. 双击 exe 安装包,点击【下一步】

  2. 点击【更改】,自定义无中文路径,复制路径保存,后续配置使用

  3. JDK8 会弹出独立 JRE 安装窗口,保持默认路径下一步;JDK11/17 无 JRE 步骤

  4. 等待进度条走完,点击关闭完成安装

4.3 系统环境变量配置(核心步骤,区分系统 / 用户变量)

  1. 此电脑右键 → 属性 → 高级系统设置 → 环境变量

  2. 操作系统变量(全局所有用户生效,不配置用户变量)

① 新建 JAVA_HOME(必配,Maven/Tomcat/IDEA 依赖读取)

变量名:JAVA_HOME(大小写严格固定,不能写错)
变量值:粘贴刚才保存的 JDK 根目录

② 编辑 Path 变量

双击系统变量 Path → 新建,填入:

%JAVA_HOME%\bin

JDK8 可额外添加%JAVA_HOME%\jre\bin,JDK11/17 无需

③ CLASSPATH(仅 JDK8 需要,11/17 可省略)

新建变量:
变量名:CLASSPATH
变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar

  1. 全部窗口依次点击确定保存,关闭所有已打开 CMD 终端(旧终端不会加载新变量)

4.4 验证环境是否配置成功

新开 CMD 窗口执行两条命令,同时输出版本号即成功

# 验证运行环境java-version# 验证编译器(缺失代表只装了JRE,无完整JDK)javac-version

4.5 Windows 多 JDK 共存 + 一键切换方案

  1. 系统变量新建 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
  1. 修改JAVA_HOME值,切换对应版本路径

  2. 切换后必须重启 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

永久环境变量配置

  1. 区分终端 shell:新版 Mac 默认 zsh,旧版 bash
# zsh编辑器vim~/.zshrc# bash编辑器vim~/.bash_profile
  1. 写入多版本共存配置(直接复制)
# 多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
  1. 生效配置文件
source~/.zshrc# bash执行 source ~/.bash_profile
  1. 验证:java -version

六、Linux(Ubuntu/CentOS)服务器部署教程

6.1 Ubuntu 在线安装

# JDK17sudoaptinstallopenjdk-17-jdk# JDK11sudoaptinstallopenjdk-11-jdk# JDK8sudoaptinstallopenjdk-8-jdk

6.2 离线压缩包部署(内网服务器)

  1. 解压安装包至统一目录
sudotar-zxvfjdk-17_linux-x64_bin.tar.gz-C/usr/local/java/
  1. 全局永久环境变量配置(所有用户生效)
sudovim/etc/profile

写入配置:

exportJAVA_HOME=/usr/local/java/jdk-17.0.13exportPATH=$PATH:$JAVA_HOME/bin
  1. 全局生效
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 生效

九、全文总结

  1. 版本选型核心:老项目 JDK8、过渡项目 JDK11、全新云原生项目 JDK17

  2. 商用优先选择 Temurin/Corretto OpenJDK,规避 Oracle 版权收费

  3. 环境变量必须配置JAVA_HOME,适配 Maven、Tomcat、开发工具

  4. 多版本共存统一设置独立 HOME 变量,一键切换开发环境

  5. 配置完成必须新开终端验证,避免缓存导致命令不生效

  6. SpringBoot3 强制依赖 JDK17,升级项目前务必统一开发 & 生产环境 JDK 版本

http://www.jsqmd.com/news/1096909/

相关文章:

  • 考虑网络安全职业?这些就业趋势告诉你答案
  • C语言实战:cJSON库在嵌入式网络通信中的配置数据封装与解析
  • 【MATLAB】异构无人机集群协同飞行控制仿真
  • [CrackMe]Chafe.1.exe的逆向分析与算法还原实战
  • Attu在Mac M芯片上提示“已损坏“?一文解决安装与兼容性问题
  • 在Windows程序启动前就动手:用TLS回调函数实现DLL加载监控(附完整C++代码)
  • 深度学习优化器演进之路:从SGD到Adam的核心思想与实战选择
  • 零基础 Vibe Coding 教程 settings.json CLAUDE.md 26-32
  • QQ空间备份终极指南:一键永久保存你的青春记忆
  • 「实践」CosineLRScheduler:从理论到代码的平滑训练指南
  • Google工程师开发爆火开源工具却被解雇,官方同款随后宣布推出引热议!
  • 马克·吐温:从密西西比河到世界文坛,一部美国精神的成长史
  • iObjects Java 部署实战:从零到一的避坑指南
  • CMake语法
  • 【MATLAB】无人机编队故障成员替换重构策略
  • 掌握Vue3 第二十四章:解锁兄弟组件通信的两种高效模式
  • 告别手写!用Playwright Codegen录制脚本,5分钟搞定Web自动化测试
  • windows怎么打开后缀为epub的文件
  • 若依Vue3框架:深度解析侧边栏菜单的默认展开与状态管理
  • Kali APT 仓库数字签名缺失:从报错到安全更新的解决之道
  • 深度解析:如何实现浏览器Cookie安全本地化导出的终极方案
  • 射频天线设计实战:从S11、VSWR到RL,一文读懂匹配性能核心指标
  • 从原理图到示波器:imx6ull开发板PWM输出全流程实战解析
  • 基于MATLAB机器人工具箱的SCARA机器人D-H建模与轨迹规划实战
  • 交易所系统开发:搭建指南与功能步骤详解
  • Logisim实战:从零构建32位MIPS ALU运算器
  • MOE实战:从复合物结构到稳定构象的分子动力学模拟全流程
  • SAP FICO 后台配置实战:从零搭建财务核心框架
  • 【Unity3D】从零到一:打造可自定义的记忆翻牌小游戏
  • Qt实战:从C2001“常量中有换行符”错误,解析MSVC编译下的UTF-8编码陷阱与根治方案