详情介绍
Java 17 LTS 是 Java SE 平台的最新长期支持版本。 根据 Oracle 免费条款和条件许可,JDK 17 二进制文件可在生产中免费使用,并可免费重新分发。JDK 17 将根据这些条款接收更新,至少在 2024 年 9 月之前。JDK 是使用 Java 编程语言构建应用程序和组件的开发环境。JDK 包括用于开发和测试用 Java 编程语言编写并在 Java 平台上运行的程序的工具。本次提供的是Java SE Development Kit(JDK) 17 for Windows官方版本下载,欢迎需要此款工具的朋友前来下载使用。
JDK17新特性详解
预览版:该功能在当前版本可以使用,如果效果不是很好的话,可能以后的其他版本就会删去该功能。
最终版:该功能在之前版本效果很好,之后的每个版本中都会存在该功能。
1、switch新增模式(预览版)
使用 switch 表达式和语句的模式匹配以及对模式语言的扩展来增强 Java 编程语言。将模式匹配扩展到 switch 允许针对多个模式测试表达式,每个模式都有特定的操作,以便可以简洁安全地表达复杂的面向数据的查询。基于JDK16 instanceof模式匹配(最终版)优化升级switch使用方法,先回忆下JDK16模式匹配(最终版)
if (obj instanceof String s) {
// 直接使用 s拼接字符串
s += "heihei";
} else if (obj instanceof Integer i){
// 直接使用i进行整型逻辑运算
i += 1;
}
switch可直接用instanceof模式匹配选择(需要提前考虑null判断)
Object o;
switch (o) {
case null -> System.out.println("首先判断对象是否为空,走空指针逻辑等后续逻辑");
case String s -> System.out.println("判断是否为字符串,s:" + s);
case record p -> System.out.println("判断是否为Record类型: " + p.toString());
case int[] arr -> System.out.println("判断是否为数组,展示int数组的长度" + ia.length);
case Integer i -> System.out.println("判断是否为Intger对象,i:" + i);
case Student s -> System.out.println("判断是否为具体学生对象,student:" + s.toString());
case UserCommonService -> System.out.println("判断是否为普通用户实现类,然后走普通用户逻辑");
case UserVipService -> System.out.println("判断是否为vip用户实现类,然后走vip用户逻辑");
default -> System.out.println("Something else");
}
2、Realed class密封类(最终版)
密封类和接口限制哪些其他类或接口可以扩展或实现它们。
public sealed interface Shape{
final class Planet implements Shape {}
final class Star implements Shape {}
final class Comet implements Shape {}
}
public abstract sealed class Test{
final class A extends Test {}
final class B extends Test {}
final class C extends Test {}
}
3、随机数增强
为伪随机数生成器 (PRNG) 提供新的接口类型和实现,包括可跳转的 PRNG 和额外的一类可拆分 PRNG 算法 (LXM)。
4、浮点运算更加严格
简化数字敏感库开发,包括java.lang.Math和java.lang.StrictMath(对开发无实际意义)
5、Parallel GC 默认启用
Parallel GC 默认启用自适应并行处理,并行GC确定java.lang.ref.Reference在垃圾收集期间用于处理实例的最佳线程数。
默认-XX:ParallelRedProcEnabled: true。在有多个线程可用于垃圾收集的机器上,明显改善了垃圾收集暂停的阶段,如果遇到垃圾收集暂停增加的情况,可以通过-XX:ParallelRedProcEnabled在命令行上指定到原始行为
6、增强TreeMap
增强JDK-8176894(TreeMap 没有对 putIfAbsent()、computeIfAbsent()、computeIfPresent()、compute() 方法的专门实现。默认实现经常导致两次树遍历,这会损害性能)
7、弃用Socket实现工厂机制
弃用并最终删除用于为java.net 包中的套接字类型静态配置系统范围工厂 的 API 点
具体如下:
* 方法:
static void ServerSocket.setSocketFactory (SocketImplFactory fac)
static void Socket.setSocketImplFactory (SocketImplFactory fac)
static void DatagramSocket.setDatagramSocketImplFactory (DatagramSocketImplFactory fac)
* Types
java. net SocketImplFactory
java.net DatagramSocketImplFactory
也可以弃用java.net SocketImplFactory 和 DatagramSocketImplFactory 类型 ,因为它们的唯一用途与上述工厂有关 设置方法。
8、统一日志支持异步日志刷新
为了避免在使用统一日志的线程中出现不希望的延迟,用户现在可以请求统一日志系统以异步模式运行。通过传递命令行选项来完成的-Xlog:async。在异步日志模式下,日志站点将所有日志消息排入缓冲区。独立线程负责将它们刷新到相应的输出。中间缓冲区是有界的。缓冲区耗尽时,将丢弃排队消息。可以使用命令行选项控制中间缓冲区的大小-XX:AsyncLogBufferSize=<bytes>。
9、新增 java.time.InstantSource
java.time.InstantSource引入了一个新界面。这个接口是一个抽象java.time.Clock,只关注当前时刻,不涉及时区。
10、javadoc工具
新的“新 API”页面和改进的“弃用”页面,JavaDoc 现在可以生成一个页面,总结最近 API 的变化。要包含的最新版本列表是使用--since命令行选项指定的。这些值用于查找@since要包含在新页面上的具有匹配标签的声明。该--since-label命令行选项提供了“新API”页面的标题文本使用。
Java SE Development Kit 17安装教程
1、在本站下载并解压缩后,双击“jdk-17_windows-x64_bin.exe”,根据安装向导提示,选择“下一步”

2、默认安装在C盘,继续“下一步”

3、正在安装,稍等片刻即可,中途不要关闭电脑

4、好了,到这里Java SE Development Kit 17就安装完成啦

安装 JDK 17 和 JRE 8 时修复 Shim 情况
当您安装 JDK 17,然后安装 JRE 8,然后运行该 java -version命令时,1.8.0输出中显示的是17。这是因为 javapath位于用户环境路径中 JDK 17 位置之前。
这是 JRE 8 安装程序的一个错误。要解决此填充程序的情况,请卸载并重新安装 JDK 17。
JDK安装疑难解答
解压期间系统错误
如果您看到错误消息:system error during decompression,则包含该TEMP目录的磁盘上可能没有足够的空间。
程序无法在 DOS 模式下运行
如果您看到错误消息:This program cannot be run in DOS mode,请执行以下操作:
打开 MS-DOS 外壳程序或命令提示符窗口。
右键单击标题栏。
选择属性。
选择程序选项卡。
单击高级。
确保未选中防止基于 MS-DOS 的程序检测 Windows 项。
选择确定。
再次选择确定。
退出 MS-DOS 外壳。
重启你的电脑。
不属于系统代码页的字符
如果安装目录不是系统区域设置代码页的一部分,则可能会出现 1722 错误。为防止出现这种情况,请确保用户和系统区域设置相同,并且安装路径仅包含作为系统区域设置代码页一部分的字符。可以在区域选项或区域设置控制面板中设置用户和系统区域设置。
相关的错误编号是 4895647。
在 JDK 卸载失败后清理注册表
有时,尝试通过 Windows添加/删除程序卸载 JDK 会 在注册表中留下一些未完全删除的 Java 条目。这些遗留的注册表项可能会导致安装新版本 Java 时出现问题。以下是清理注册表项的方法:
程序安装和卸载疑难解答(推荐方法)
手动注册表编辑
程序安装和卸载疑难解答(推荐方法)
运行程序安装和卸载疑难解答来修复损坏的注册表项,这些注册表项会阻止程序完全卸载或阻止新的安装和更新。
手动编辑注册表(仅当 Fix It 实用程序不起作用时才使用此功能)
错误地编辑您的注册表可能会严重损坏您的系统。在更改注册表之前,您应该从您的计算机备份任何有价值的数据。
使用File->Export注册表编辑器的功能在删除之前保存注册表项。如果您删除了错误的注册表项,您可以使用该File->Import功能从保存的备份文件中恢复注册表。
要删除注册表项:
确定正确的注册表项。请参阅查找 JDK 注册表项和 UninstallString 值。
突出显示该键,右键单击并选择 Delete。
出现提示时单击是。
JDK 被卸载。
在 Windows 上卸载 JDK
要卸载 JDK 17,请使用Microsoft Windows控制面板中的添加/删除程序实用程序。
在静默模式下卸载 JDK
您可以使用命令行卸载 JDK。
使用以下命令以静默模式卸载JDK:
MsiExec.exe/X{<UninstallString>}
例如,要卸载 JDK 15,请运行以下命令:
MsiExec.exe /X{E04E5624-3CF1-5E84-A439-4D8FAAA05C79}
更新日志
Java™ SE 开发工具包 17.0.19 (JDK 17.0.19)
上映日期:2026年4月21日
本次更新的完整版本字符串为 17.0.19+9(“+” 表示“构建”)。 版本号是 17.0.19。该 JDK 符合 Java SE 规范 17.1 版本(JSR 392 MR 1 2024-07-02)。
IANA TZ 数据 2026a
JDK 17.0.19包含2026a年IANA时区数据,其中包含以下变更:
为兼容FreeBSD做了若干代码修改。
唯一变化的数据是下加利福尼亚的闰秒表到期时间和1976年前的时间。
摩尔多瓦自2022年以来一直采用欧盟过渡时间。
“正确”的TZif文件默认不再安装。
-DTZ_RUNTIME_LEAPS=0 禁用了对闰秒的运行时支持。
TZif 文件不再限制为 50 字节的缩写。
Zic不再受限于50闰秒。
已经修复了几个整数溢出的漏洞。
更多信息请参阅JRE软件中的时区数据版本。
安全基线
JDK 17.0.19 发布时,Java 运行环境(JRE)的安全基线为 具体如下表:
Java 家族版本 安全基线(完整版本字符串)
17 17.0.19+9
11 11.0.31+9
8 1.8.0_491-b10
保持JDK的更新
Oracle 建议每次关键补丁更新时都要更新 JDK。 为了判断某个版本是否为最新,安全基线页面可以 用于确定每个发行家族的最新版本。
关键补丁更新包含安全漏洞修复,通常提前一年宣布 关键补丁更新、安全警报和公告。 不建议在下一次关键补丁更新后使用该 JDK(版本 17.0.19) 2026年7月21日。
Java管理服务面向所有用户,可以帮助你在系统中发现易受攻击的Java版本。Java SE 订阅用户和运行在 Oracle Cloud 中的客户可以使用 Java 管理服务更新 Java 运行时,并进行进一步的安全审查,比如识别 Java 程序中使用的潜在易受攻击的第三方库。现有的 Java 管理服务用户,点击这里登录您的仪表盘。Java 管理服务文档提供了一份对所有人开放的功能列表,以及仅对客户开放的功能。了解更多关于使用 Java 管理服务来监控和保护您的 Java 安装的信息。
新功能
security-libs/javax.net.ssl
➜ TLSv1.3 可配置新会话票数 (JDK-8328608)
一个新的系统属性 ,设定了每个会话由 JSSE 服务器发送的 TLSv1.3 恢复工单数量。它可以在命令行设置,设置为 ,范围从 0 到 10。默认是1。jdk.tls.server.newSessionTicketCount-Djdk.tls.server.newSessionTicketCount=##
更多详情请参见“定制JSSE”。
security-libs/java.security
➜ 增强的密钥工具密码处理,输出被重定向 时(JDK-8354469)
该命令通过系统控制台读取密码,防止密码显示在屏幕上。然而,控制台通常只有在标准输入和输出流都未被重定向时才可用。此前,如果标准输出流被重定向到文件或其他命令,控制台将不可用,输入密码会在屏幕上回响。这一改进改进了密码处理,确保即使标准输出流被重定向,密码也不会显示在屏幕上。这一改进也对命令和JAAS TextCallbackHandler API进行了改进。keytooljarsigner
热点/网关
➜ G1:支持 UseGCOverheadLimit (JDK-8212084)
当垃圾回收开销超过百分比(默认值)且空闲的Java堆低于百分比(默认值)时,G1垃圾回收器会抛出(OOME),连续五次垃圾回收。OutOfMemoryExceptionGCTimeLimit98GCHeapFreeLimit2
此功能默认启用。可以通过该选项禁用。-XX:-UseGCOverheadLimit
实现方式与并行垃圾回收器已有的功能相呼应。然而,OOME触发器的具体条件可能存在差异,因为G1对垃圾回收开销和自由Java堆的计算略有不同。
security-libs/java.security
➜ Oracle JDK src.zip 文件现在包含了 JSSE/JCE/JGSS 组件的源代码 (JDK-8369608)
随Oracle JDK一起分发的文件现在包含了JCE、JGSS和JSSE的源代码。调试工具现在可以检查或显示大部分安全源文件。<java-home>/lib/src.zip
security-libs/java.security
➜ 新的安全属性 jdk.crypto.disabled 用于限制 JCE 层 算法的算法(JDK-8244336)
引入了一个新的安全属性,用于禁用 JCE/JCA 加密服务的算法。最初,该属性仅支持密码、密钥存储、消息摘要和签名服务。该属性在文件中定义,初始默认不会禁用任何算法。不过,未来情况可能会有所变化。如果应用程序需要重新启用算法,该安全属性可以被同名的系统属性覆盖。jdk.crypto.disabledAlgorithmsjava.security
更多信息请参见禁用和受限加密算法。
已知问题
client-libs/java.awt
➜ SLES 16 需要安装非默认软件包才能运行 AWT 应用程序 (JDK-8378839(非公开))
完整的 SuSE Enterprise Linux Server,简称 SLES,16 版桌面安装不包含一个包,而 是 JDK 桌面应用完全运行所必需的。这适用于所有Oracle JDK版本。xdg-desktop-portal-gnome
用户应使用标准的SLES软件包仓库命令安装该包,例如执行:
% sudo zypper install xdg-desktop-portal-gnome
% sudo reboot now
其他注释
security-libs/java.security
➜ 不信任以中华根证书为锚点并于2026年3月17日之后发布的TLS服务器证书 (JDK-8369282)
JDK将停止信任2026年3月17日之后发布、以中华根证书为锚点的TLS服务器证书,这与谷歌和Mozilla宣布的类似计划一致。
2026年3月17日或之前发布的TLS服务器证书将继续被信任,直到证书到期。在该日期之后签发的证书,并由下表中列出的证书授权机构锚定的证书将被拒绝。
这些限制在 Java 安全套接字扩展(JSSE)API 的 JDK 实现(提供者)中得到执行。如果服务器的证书链由下表中的任何证书授权机构锚定,且证书在2026年3月17日之后签发,则TLS会话不会进行协商。SunJSSE
应用程序会收到一个异常,提示信任锚点不被信任,例如:
"TLS Server certificate issued after 2026-03-17 and anchored by a distrusted legacy Chunghwa root CA: OU=ePKI Root Certification Authority, O="Chunghwa Telecom Co., Ltd." C=TW"
JDK 可以通过在配置文件中删除安全属性中的“CHUNGHWA_TLS”来重新信任这些证书。jdk.security.caDistrustPoliciesjava.security
这些限制适用于JDK中包含的以下忠华根证书:
根证书在2026-03-17之后被不信任
杰出名称 SHA-256 指纹
OU=ePKI根认证机构,O=“中华电信有限公司”,C=TW C0:A6:F4:DC:63:A2:4B:FD:CF:54:EF:2A:6A:08:2A:0A:72:DE:35:80:3E:2F:F5:FF:52:7A:E5:D8:72:06:DF:D5
你也可以使用JDK的工具打印证书链的详细信息,具体如下:keytool
keytool -v -list -alias <your_server_alias> -keystore <your_keystore_filename>
如果链中任何证书由表中某个根CA签发,输出中列出,你需要更新证书或联系管理服务器的组织。
修复
本版本还包含了 Oracle 关键补丁更新中描述的安全漏洞修复。
➜ 17.0.19修复的问题:
# JBS 组件/子组件 摘要
1 JDK-8373727 client-libs/2d 新的 XBM 图像解析器回归:仅解析位图数组的第一行
2 JDK-8373290 client-libs/2d 更新FreeType至2.14.1
3 JDK-8379158 client-libs/2d 更新FreeType至2.14.2
4 JDK-6899304 client-libs/java.awt java.awt.Toolkit.getScreenInsets(GraphicsConfiguration) 返回错误的值
5 JDK-8372756 client-libs/java.awt 在 XWayland GNOME 上,鼠标附加按钮和横向滚动功能被破坏 >= 47,之后是 JDK-8351907
6 JDK-8372534 client-libs/java.awt 更新 Libpng 至 1.6.51
7 JDK-8372048 client-libs/java.awt Linux 远程桌面的性能提升
8 JDK-8375063 client-libs/java.awt 更新 Libpng 至 1.6.54
9 JDK-8372977 client-libs/java.awt 不必要的 gthread-2.0 加载
10 JDK-8244400 client-libs/javax.swing MenuItem 可能缓存了大小,且在屏幕 DPI 变化时没有更新
11 JDK-8366261 core-libs/java.io 提供 sun.security.util.Password 的实用方法
12 JDK-8301875 core-libs/java.util java.util.TimeZone.getSystemTimeZoneID 使用 C 库默认文件模式
13 JDK-8361117 热点/编译器 LShiftLNode::Ideal 中的 SIGSEGV,因意外的死节点而存在
14 JDK-8370325 热点/网关 G1:禁止为TLAB分配而进行GC
15 JDK-8365972 热点/JFR JFR:ThreadDump 和 ClassLoaderStatistics 事件可能导致连续轮换
16 JDK-8303475 热点/运行时 filemap.cpp 中的潜在空指针去引用
17 JDK-8375549 security-libs/java.security 如果 jdk.crypto.disabledAlgorithms 有多个已知 oid 的条目,则使用 ConcurrentModificationException
18 JDK-8374555 security-libs/java.security 当不从 System.in 读取时,s.s.u.Password中无需显示输入警告
19 JDK-8334670 security-libs/javax.net.ssl SSLSocketOutputRecord 缓冲区计算错误
20 JDK-8311644 security-libs/javax.net.ssl 当客户端未发送任何证书时,服务器不应发送bad_certificate警报
21 JDK-8336695 XML/Jaxp 更新 Commons BCEL 至 6.10.0 版本
下载地址
人气软件

Java SE Development Kit(JDK) 17.0.19 官方正式版 Win64
Java SE Development Kit(JDK) 17.0.19 官方正式版 Linux64
JetBrains Pycharm Pro v2026.1 中文专业免费正式版(附汉化包+安
intellij IDEA v2026.1 官方中文正式版(附汉化包+安装方法)
JDK11(Java SE Development Kit 11) v11.0.30 x64 LTS 长期支持
Java SE Development Kit(JDK) 21.0.11 LTS 官方正式版 Win64
Java SE Development Kit(JDK1.8) jdk-8u491-windows-x64.exe 64
EXT界面图形工具Ext Designer 特别版
WinHex v21.0 绿色汉化特别版(无需注册)
python v3.14.4 for Windows(python开发环境工具) 官方正式版(附
相关文章
-
Java SE Development Kit (JDK7) 介绍与配置方法JDK是整个Java的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具和Java基础的类库(rt.jar)。不论什幺Java应用服务器实质都是内置了某个版本的JDK。因...
-
Java配置 JDK开发环境搭建及环境变量配置详细图文教程这篇文章主要介绍了Java配置 JDK开发环境搭建及环境变量配置详细图文教程,需要的朋友可以参考下...
-
JDK1.9怎么安装配置?Java SE 9(JDK9)详细安装教程+环境变量配置方法JDK1.9是JDK是整个Java的核心,包括了Java运行环境,一堆Java工具和Java基础的类库。新版本增添了特性和性能提升,下面小编就整理了Java SE Development Kit 9.0安装详细步...
-
windows下jdk安装图解(覆盖安装报错)这篇文章主要介绍了windows下jdk安装图解,覆盖安装报错,第一次安装和第二次安装区别,需要的朋友可以参考下...
-
把MyEclipse的默认jdk版本修改为本地JDK的方法介绍最近,有不少网友问小编如何更改MyEclipse默认的JDK版本为自己安装的JDK?今天小编就给大家详细介绍一下把MyEclipse的默认jdk版本修改为本地JDK的方法,希望对大家有所帮助...
-
mac安装jdk及环境变量配置文件这篇文章主要介绍了mac安装jdk及环境变量配置文件的详细操作过程,喜欢的收藏一下吧。...
下载声明
☉ 解压密码:www.jb51.net 就是本站主域名,希望大家看清楚,[ 分享码的获取方法 ]可以参考这篇文章
☉ 推荐使用 [ 迅雷 ] 下载,使用 [ WinRAR v5 ] 以上版本解压本站软件。
☉ 如果这个软件总是不能下载的请在评论中留言,我们会尽快修复,谢谢!
☉ 下载本站资源,如果服务器暂不能下载请过一段时间重试!或者多试试几个下载地址
☉ 如果遇到什么问题,请评论留言,我们定会解决问题,谢谢大家支持!
☉ 本站提供的一些商业软件是供学习研究之用,如用于商业用途,请购买正版。
☉ 本站提供的Java SE Development Kit(JDK) 17.0.19 官方正式版 Win64资源来源互联网,版权归该下载资源的合法拥有者所有。





















