news 2026/9/9 9:07:13

JDK与JRE区别详解:Java开发环境安装配置全攻略

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
JDK与JRE区别详解:Java开发环境安装配置全攻略

刚帮一个学弟装完Java环境,他问我“JDK和JRE到底啥区别”的时候,我意识到网上的教程大部分都默认你已经懂了这些基础概念,结果就是照着抄命令能跑通,一旦出点幺蛾子就完全不知道怎么排查。这篇东西我就按带新人的标准来写,把下载、安装、配置环境变量、验证结果整个链路里会遇到的坑全部摊开讲清楚,包括Oracle官网下载慢怎么办、环境变量配错导致命令行识别不了、JDK 8和JDK 17到底该装哪个这类高频问题,一次性给你捋顺。

1. 装Java之前,先把这几个概念搞清楚

很多人一上来就搜“Java下载”,装完之后发现写代码的时候报错,或者命令行敲java -version没反应,其实都是因为没搞明白自己到底装的是什么、装完之后要做什么。

1.1 JDK、JRE、JVM三者之间的关系

这三个缩写是Java初学者最容易混淆的一组概念。

  • JVM(Java Virtual Machine):Java虚拟机,是运行Java字节码的那个“虚拟电脑”。Java号称“一次编写,到处运行”,靠的就是JVM——同一个.class文件,在Windows的JVM上跑、在Linux的JVM上跑、在macOS的JVM上跑,结果都一样。
  • JRE(Java Runtime Environment):Java运行环境,包含JVM和Java核心类库。如果你只是要运行别人写好的Java程序,装JRE就够了。
  • JDK(Java Development Kit):Java开发工具包,包含完整的JRE(JDK里头自带JRE),再加上编译器javac、打包工具jar、文档生成工具javadoc、调试工具jdb等一系列开发用的工具。

用修车来类比:JVM是发动机,JRE是装好发动机的整车,JDK是整车加上全套修车工具。你想开车,有JRE就行;你想自己造车修车,必须上JDK。

所以,要学Java开发,装JDK是唯一正确选择。网上有些人说“装个JRE就能跑Eclipse/IDEA”,那是IDE自带了编译器或者别人帮你把JDK嵌进去了,自己动手开发的话别走这条弯路。

1.2 版本选择:JDK 8、11、17、21到底装哪个

这是新手问得最多的问题之一。Oracle从JDK 9开始改了版本策略,每6个月出一个新版本,每3年出一个LTS(长期支持)版本。目前市面上主流的LTS版本是这几个:

版本发布年份当前状态适合场景
JDK 8(1.8)2014仍在广泛使用,Oracle提供付费扩展支持老项目维护、部分传统企业环境
JDK 112018LTS,官方长期支持多数企业已迁移到11
JDK 172021LTS,目前最主流的长期支持版本新项目首选
JDK 212023LTS,最新的长期支持版本新项目、想用最新特性

我的建议非常直接:如果你是刚开始学,直接装JDK 17。理由有两个:第一,绝大多数企业当前的生产环境就是17,你学的版本和用的版本一致,面试聊起来也顺畅;第二,JDK 17比JDK 21稳定,各种第三方框架、中间件的兼容性验证得更充分。如果你要维护的是老项目,再根据项目的实际要求装对应的版本。

别一上来就追最新版。JDK 21虽然是最新LTS,但很多公司还停留在11甚至8,你拿21写的代码,到人家环境里编译不过去,等于白练。

1.3 32位还是64位,以及OpenJDK和Oracle JDK的区别

操作系统分32位和64位,JDK也分。现在新电脑基本都是64位,建议直接下64位版本的JDK。注意,如果你的操作系统是32位的,只能装32位JDK,并且32位JDK最高只到JDK 8,后续版本官方不再提供32位安装包。

Oracle JDK和OpenJDK这俩的区别,简单说就是“官方收费版”和“开源免费版”的关系。Oracle JDK从JDK 11开始,商用需要付费订阅;OpenJDK由开源社区维护,完全免费,两者在代码层面的差别极小。学习阶段用哪个都行,我建议直接装Oracle JDK 17,因为下载方便、安装包完善、图形化安装体验好;如果你之后进公司,公司的服务器上大概率装的是OpenJDK或者基于OpenJDK的发行版(比如Eclipse Temurin、Adoptium),到时候再切换也不迟。

2. JDK安装包下载:官网与国内镜像的选择

下载这个环节,新手踩的坑最多,说来说去无非两个问题:官网打不开或者打开极慢;下载完不知道装哪个文件。

2.1 Oracle官网下载完整流程

Oracle JDK的官方下载地址是Oracle官网的Java Downloads页面。进入之后往下拉,找到“Java SE 17”或者你选定的版本,点击对应的下载按钮。

这里有个很容易卡住的细节:下载JDK之前需要先接受Oracle的许可协议,页面上有个“Accept License Agreement”的单选框,不点选的话下载链接是灰色的,点了才能点下载。

在文件列表里,Windows用户需要根据操作系统位数选择:

  • jdk-17_windows-x64_bin.exe:64位Windows安装包
  • jdk-17_windows-x64_bin.msi:MSI格式,适合企业批量部署用

macOS用户选.dmg格式,Linux用户选.tar.gz格式。

2.2 官网下载慢?国内镜像站这样用

Oracle的服务器在国外,国内用户下载时经常遇到速度只有几十KB每秒的情况。遇到这种情况,我推荐几个国内镜像源,速度和稳定性都有保障:

  • 清华大学的TUNA镜像站:mirrors.tuna.tsinghua.edu.cn,提供OpenJDK、Adoptium等多个发行版的镜像。页面路径一般是/Adoptium/,进去后选择对应版本和平台。
  • 华为云镜像站:mirrors.huaweicloud.com,提供OpenJDK的开源镜像,同样有详细的目录结构。
  • 阿里云开发者社区镜像站:也有Java相关的工具链镜像。

需要说明的是,这些镜像站提供的主要是OpenJDK及其发行版,Oracle JDK由于许可限制,国内镜像一般不会同步。所以如果你想装Oracle JDK,要么忍受慢速下载,要么用下载工具(比如浏览器插件或者下载器软件)辅助;如果你只想快速把环境搭起来学习,直接用镜像站下载OpenJDK或者Eclipse Temurin,完全够用。

2.3 下载之后先检查文件完整性

下载完成后,建议先看一眼文件大小是否和官网标注一致。比如JDK 17的exe安装包大约在170MB左右,如果下载下来只有几十MB,大概率是下载中断了,直接删掉重新下载,省得装到一半报错再排查。

校验文件哈希值这个步骤,新手可以跳过,但如果你是在公司网络环境下载,建议用certutil(Windows自带命令)或者sha256sum(macOS/Linux命令)核对一下官方提供的SHA256值,防止文件被篡改。

3. Windows环境下的完整安装与环境变量配置

Windows是大多数Java初学者使用的操作系统,所以这部分我写细一点。

3.1 安装JDK的完整步骤

双击安装包,进入安装向导。JDK 17的安装界面比老版本简洁不少,基本一路Next就能完成,但有几处需要特别注意:

第一,安装路径不要带中文和空格。默认路径是C:\Program Files\Java\jdk-17,这个路径中间有空格,虽然官方支持,但个别老版本的开发工具在解析带空格的路径时会出问题。我个人的习惯是改成D:\Java\jdk-17这类无空格的路径,如果你电脑只有一个C盘,装在C:\Java\jdk-17也行。

第二,安装过程中会询问是否安装公共JRE(Public JRE)。JDK 11之后的版本,默认不再随JDK安装公共JRE,安装界面也不再出现这个选项。如果你遇到要求勾选公共JRE的旧版本安装包,可以勾选也可以不勾选,因为JDK目录内部已经包含了完整的JRE,对外提供的java命令可以直接调用。

第三,安装完成后不要马上关窗口,JDK安装向导最后一步会有一个“后续步骤”的提示,告诉你需要配置JAVA_HOME环境变量。直接点Close,然后进入下一步。

3.2 JAVA_HOME、Path、classpath环境变量配置详解

环境变量是Windows下Java安装最容易出错的部分。JDK本身不需要安装到特定目录才能运行,但要让命令行工具(比如cmdPowerShell)在任意目录下识别javajavac命令,就必须配置环境变量。

第一步,打开环境变量设置界面。右键“此电脑”或“我的电脑” → 属性 → 高级系统设置 → 环境变量。也可以用快捷键Win + R,输入sysdm.cpl,回车后切换到“高级”选项卡,点“环境变量”。

第二步,新建JAVA_HOME系统变量。在“系统变量”区域点“新建”,变量名填JAVA_HOME,变量值填你的JDK安装路径,比如C:\Java\jdk-17。注意不要带bin目录,就填到JDK的根目录。

第三步,配置Path变量。在系统变量里找到Path,选中后点“编辑”。在编辑界面里点“新建”,添加一行%JAVA_HOME%\bin,然后点确定保存。

这里顺带解释一下为什么是%JAVA_HOME%\binbin目录存放着java.exejavac.exe等工具,把它加进Path后,系统在任意目录下执行java命令时,就能顺着Path里记录的路径找到这个exe文件。使用%JAVA_HOME%而不是直接写死C:\Java\jdk-17\bin,是为了方便以后更换JDK版本——到时候只需要改JAVA_HOME一个变量,Path里那句不用动。

第四步,关于classpath变量。很多教程会让你新建一个classpath变量,值是.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar。这里我必须说清楚:JDK 1.5之后,classpath已经不是必须配置的了,编译器会在当前目录自动查找类文件。配了反而可能带来一堆莫名其妙的坑(比如.和jar包的顺序问题)。所以新装JDK 17,不配classpath,没任何问题。你要是看到老教程让你配,直接跳过。

3.3 安装完成后的验证

配置完环境变量后,必须重开一个命令行窗口(重要,环境变量的修改只对新的进程生效),然后执行:

java -version

如果输出类似下面这样的信息,说明Java运行环境安装成功:

java version "17.0.9" 2023-10-17 LTS Java(TM) SE Runtime Environment (build 17.0.9+11-LTS-39) Java HotSpot(TM) 64-Bit Server VM (build 17.0.9+11-LTS-39, mixed mode, sharing)

再验证编译工具:

javac -version

输出类似javac 17.0.9就对了。

这两个命令都能正常输出版本号,基本就说明核心链路通了。接下来可以写个最简单的Java程序测试一下编译运行:

public class Hello { public static void main(String[] args) { System.out.println("Hello Java"); } }

用记事本或者任意文本编辑器把这个文件保存为Hello.java(注意扩展名是.java,不是.txt),然后在文件所在目录打开命令行,执行:

javac Hello.java java Hello

看到Hello Java输出,你的Java开发环境就完全跑到通了。

4. macOS与Linux平台的安装差异与配置要点

macOS和Linux虽然是Java开发者的“主场”,但安装配置这块也有不少细节值得单独讲。

4.1 macOS系统:dmg安装包与命令行配置

macOS下推荐使用.dmg格式的安装包。双击打开,里面会有JDK的安装器,双击安装器按提示操作即可。安装完成后,JDK默认安装到/Library/Java/JavaVirtualMachines/目录下,每个版本对应一个子目录。

macOS自带Java管理工具/usr/libexec/java_home,可以自动识别系统里装了多少个JDK版本。在终端里执行:

/usr/libexec/java_home -V

能看到所有已安装的JDK版本列表。

配置环境变量,需要对~/.zshrc文件进行编辑(macOS Catalina之后默认shell是zsh,老版本是bash的话用~/.bash_profile):

export JAVA_HOME=$(/usr/libexec/java_home -v 17) export PATH=$JAVA_HOME/bin:$PATH

第一行的写法是macOS特有的,通过java_home工具动态获取指定版本的安装路径,比写死路径灵活。如果你没装JDK 17而装的是其他版本,把-v后面的数字改成对应版本就行。

编辑完执行source ~/.zshrc让配置生效,再验证java -version

4.2 Linux系统:tar.gz解压与符号链接

Linux安装JDK最常用的两种方式:包管理器安装和tar.gz解压安装。

方式一,包管理器安装。Ubuntu/Debian系统:

sudo apt update sudo apt install openjdk-17-jdk

CentOS/RHEL/Fedora系统:

sudo yum install java-17-openjdk-devel

包管理器安装的好处是自动配置环境变量,缺点是版本往往不是最新的,而且你拿到的可能是OpenJDK而非Oracle JDK。

方式二,tar.gz解压安装。把下载的.tar.gz包解压到指定目录:

sudo mkdir -p /usr/local/java sudo tar -zxvf jdk-17_linux-x64_bin.tar.gz -C /usr/local/java/

然后编辑/etc/profile文件(对所有用户生效),在文件末尾添加:

export JAVA_HOME=/usr/local/java/jdk-17.0.9 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib

执行source /etc/profile让配置生效。这里多了一个CLASSPATH,老版本Linux上装Java经常需要,但实际上按照我前文说的逻辑,新的JDK同样不需要额外配classpath也能正常编译运行。如果你是在做比较传统的老项目部署,服务器上的脚本可能会引用CLASSPATH变量,留着也无妨;纯学习用,建议还是去掉。

方式三,通过Symbolic Link统一管理。Linux服务器上通常需要管理多个Java版本,常见做法是不改PATH里的路径,而是通过alternatives命令配置系统默认的Java版本:

sudo update-alternatives --install /usr/bin/java java /usr/local/java/jdk-17.0.9/bin/java 1700 sudo update-alternatives --config java

这样切换Java版本就不用改环境变量了,一条命令搞定。

4.3 平台对比小结

平台推荐安装方式环境变量文件特别注意
Windowsexe安装包图形化安装系统环境变量路径不要带空格
macOSdmg安装包~/.zshrcjava_home工具自动识别
Linux包管理器或tar.gz/etc/profilealternatives管理多版本

5. 安装后的验证手段与常见报错自救手册

环境搭好了,不等于万事大吉。以我在各个群里看到的情况,至少有三分之一的人在自己电脑上装完Java后,会遇到各种诡异问题。这里给大家梳理一份高频踩坑清单。

5.1 “java不是内部或外部命令”的排查链路

这是cmd窗口里最常见的报错。出现这个提示,直接说明系统没有找到java.exe这个文件,可能的原因有三个:

**第一个原因,环境变量没配置成功。**用echo %JAVA_HOME%看看能不能输出你的JDK路径,再用echo %Path%看看有没有包含%JAVA_HOME%\bin。注意,必须重开命令行窗口才生效,如果你是在配置完环境变量之前就打开的cmd窗口,这个窗口里读到的还是旧的环境变量。

**第二个原因,变量值写错了。**确认JAVA_HOME的值是不是你的JDK实际安装路径,别写到了bin目录。如果你用%JAVA_HOME%\bin这行配置方式,JAVA_HOME必须是纯路径、不能带\bin

**第三个原因,安装包没有真正安装完成。**有时安装过程中被杀毒软件拦截,或者安装器报错但你没注意,导致目录不完整。去JAVA_HOME指定的路径下看看有没有bin文件夹,bin里有没有java.exe,没有就重新安装。

5.2 “javac不是内部或外部命令”但“java -version”正常

这个情况比较典型,说明java命令能找到,javac命令找不到。原因通常是:你的系统里装了一个JRE(比如安装某些软件时自动装上的),而这个JRE的路径出现在Path的靠前位置,命令行调java时优先命中了JRE的java.exe,但JRE里没有javac.exe

解决办法是检查Path变量里有没有其他Java相关路径,把它删掉或者调整顺序,确保%JAVA_HOME%\bin在靠前的位置。

检查命令:

where java where javac

where命令会列出所有能找得到的java.exejavac.exe路径。如果java有两个路径,其中一个是JRE目录,就能确认是这个问题。

5.3 JDK版本不对:源发行版17需要目标发行版17

新手在IDE里写代码,有时候编译会报java: 错误: 无效的源发行版:17或者类似警告。这个问题的根源是IDE的编译器配置和项目设定的Java版本不一致。

举个例子,你的项目pom.xml或者IDE设置里指定了Java 17,但你的IDE实际用的是JDK 8的编译器,就会报这个错。解决办法是进入IDE的项目结构/设置,把Project SDK和Project language level都改成一致版本。以IntelliJ IDEA为例:File → Project Structure → Project → SDK选择17Language level选择17

5.4 多版本JDK切换问题

如果你电脑上同时装了JDK 8和JDK 17(学老项目课程时经常要这么干),切换版本的常规做法是修改JAVA_HOME的值。Windows下还可以利用setx命令快速切换:

setx JAVA_HOME "C:\Java\jdk-8u202" setx JAVA_HOME "C:\Java\jdk-17"

但每次都要重开命令行,比较麻烦。我的建议是给不同版本的JDK分别配置单独的JAVA_HOME,然后在切换时改JAVA_HOME这一个变量就行,Path里那句%JAVA_HOME%\bin会自动跟着变。

idea、Eclipse这类IDE,打开时它们会自己检测JAVA_HOME指定的版本,所以切换JAVA_HOME基本就够用了。

5.5 安装目录权限与防病毒软件误拦截

Windows下把JDK装在C:\Program Files下,一般不会有权限问题。但如果你用了某些精简版系统或者企业安全策略比较严格的电脑,可能会出现安装过程中无法写入文件的情况。遇到这类情况,有两个办法:一是给安装程序“以管理员身份运行”;二是把JDK改装到用户目录,比如C:\Users\你的用户名\Java\jdk-17

另外,某些杀毒软件会把javac.exe误判为可疑文件。遇到安装完成后javac突然不能用,去杀毒软件的隔离名单看看,添加信任或者恢复文件即可。

5.6 重装系统后JDK不用重装的省事技巧

最后分享一个我自己的操作习惯:JDK安装完成后,把整个安装目录做一个备份(比如压缩成zip放到网盘)。以后重装系统或者换电脑,只要解压出来,配置好JAVA_HOMEPath就能直接用,不用再走一遍安装流程。这个操作对Windows、macOS、Linux都适用。Windows用户注意,如果JDK是通过exe安装包装的,卸载程序会在注册表里留下卸载记录,但你手动去解压的目录其实不影响使用。

还有一个细节:如果你用的是安装版JDK,重装系统后最好从“控制面板 → 卸载程序”里把JDK先卸载干净再重新安装,避免注册表残留导致新版本装不上或环境变量冲突。如果是解压版,直接删除目录即可。

5.7 Java学习路线建议

环境搭好之后,很多新手会陷入“不知道学什么”的状态。根据我的经验,最稳妥的学习路线是:

  1. Java语法基础:变量、数据类型、运算符、流程控制、数组、方法——大概2周。
  2. 面向对象:类与对象、封装继承多态、接口、异常处理——大概2周。
  3. Java核心类库:常用API、集合框架、IO流、多线程、网络编程——大概4周。
  4. JDBC与数据库:MySQL基础 + JDBC操作——大概2周。
  5. 前端基础:HTML、CSS、JavaScript,不用学太深,能看懂就行——大概2周。
  6. Java Web:Servlet、JSP(了解即可),然后直接学Spring Boot——大概4周。
  7. 项目实战:做一个完整的项目巩固前面所学,比如博客系统、商城后台——边学边做。

整体下来,全职学习差不多4到6个月能具备找初级开发工作的能力。建议每学一个阶段就动手写点代码,哪怕是最简单的计算器、学生管理系统,都比只盯着视频课强。代码能力是“敲”出来的,不是“看”出来的。

写在最后

安装Java环境这件事,难度不高但细节密集。很多人在这一步被卡住,往往不是因为操作有多复杂,而是因为网上教程版本陈旧、说法不一,照着一篇老教程去配JDK 8的内容,套到JDK 17上自然对不上号。所以我的核心建议就两条:第一,跟着你这篇教程来,版本对、步骤对、验证对;第二,遇到问题时,报错信息、where java的输出、echo %JAVA_HOME%的结果,这三样东西是排查任何环境问题的关键线索——记下来,问题就解决了一半。

环境装好后,尽量早点开始写代码。Java的学习曲线不算平缓,但没有想象中陡峭,只要每天保持动手,前两周坚持过去,后面会越来越顺利。祝顺利入坑Java开发。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/9 9:06:13

技能工程化:把碎片经验沉淀为可复用技能体系的实战方法论

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/9 9:06:00

ADS1115与MicroPython实战:从I2C通信到高精度模拟量采集

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/9 9:04:48

TMS32F28P550调试架构深度解析:CLA/CAN/PWM多域协同调试指南

1. 这颗芯片不是“F28335的平替”,而是调试逻辑彻底重构的新物种 TMS32F28P550——光看型号后缀,很多人第一反应是“TI C2000系列又出了一款F28335的升级版”。我去年接手一个光伏逆变器项目时也这么想,结果在JTAG烧录阶段就卡了整整三天。不…

作者头像 李华
网站建设 2026/9/9 9:04:20

AI销售助手不神也不废:从填表与复盘场景看懂它的真实价值

前段时间陪一位做企业服务的老朋友去见客户,对方是某个设备厂商的销售总监。厂商那边的方案顾问打开PPT,第一页写着"AI销售助手,人均业绩提升30%",第二页是一长串品牌logo当背书,后面跟着各种"上线三个…

作者头像 李华
网站建设 2026/9/9 9:00:08

导师只给一页开题提纲怎么扩写:BunnyScholar补齐综述、方法和进度安排

导师只给一页开题提纲怎么扩写:BunnyScholar补齐综述、方法和进度安排 很多硕士和博士研究生在接到毕业开题任务时,往往会面临这样一个经典的尴尬开局:导师在微信或邮件里只发来了一页纸简短的题目与几条核心思路批注(例如“做一…

作者头像 李华