详情介绍
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,更新 17.0.15 (JDK 17.0.15)
4月 15, 2025
此更新版本的完整版本字符串为 17.0.15+9(其中“+”表示“内部版本”)。 版本号为 17.0.15。此 JDK 符合 Java SE 规范 (JSR 392 MR 1 2024-07-02) 的 17.1 版本。
IANA TZ 数据 2025a
JDK 17.0.15 包含 IANA 时区数据 2025a,其中包含以下更改:
巴拉圭从 2024 年春季开始采用永久性 -03。
改进菲律宾 1991 年之前的数据。
Etc/Unknown 现在已保留。
使 JDK 保持最新状态
Oracle 建议使用每个重要补丁更新来更新 JDK。 为了确定某个版本是否为最新版本,Security Baseline (安全基线) 页面可以 用于确定哪个版本是每个版本系列的最新版本。
包含安全漏洞修复的关键补丁更新会提前一年公布 重要补丁更新、安全警报和公告。 不建议在计划下一次关键补丁更新之后使用此 JDK(版本 17.0.15) 2025 年 7 月 15 日。
Java 管理服务可供所有用户使用,可帮助您在系统中找到易受攻击的 Java 版本。Java SE 订户和在 Oracle Cloud 中运行的客户可以使用 Java 管理服务更新 Java 运行时并进行进一步的安全审查,例如识别 Java 程序使用的潜在易受攻击的第三方库。现有 Java 管理服务用户单击此处登录到您的仪表板。Java 管理服务文档提供了可供所有人使用的功能列表,以及仅可供客户使用的功能列表。了解有关使用 Java 管理服务监控和保护 Java 安装的更多信息。
新功能
安全库/java.security
➜ 增强的 OCSP、证书和 CRL 提取超时 (JDK-8179502))
此功能为与证书、CRL 和 OCSP 连接和读取超时相关的属性提供了增强的语法。新语法允许以秒或毫秒为单位指定超时值。此功能还提供了三个与 connect 和 read timeout 相关的新 System 属性。
新属性:现有属性现在将与新属性配对。前一个属性将用于设置传输层连接的超时,而后者将用于管理读取数据的超时。com.sun.security.ocsp.readtimeout 系统属性的默认值将与为 com.sun.security.ocsp.timeout 属性设置的任何值相同,即使未设置后一个属性也是如此(在这种情况下,这两个属性都将设置为默认值 com.sun.security.ocsp.timeout)。新的 和 属性将分别用于控制 x 509 证书的 AuthorityInfoAccess 扩展时的 connect 和 read 超时。对于证书获取属性,必须将该属性设置为 才能进行提取并启用这些属性超时。com.sun.security.ocsp.timeoutcom.sun.security.ocsp.readtimeoutcom.sun.security.cert.timeoutcom.sun.security.cert.readtimeoutcom.sun.security.enableAIAcaIssuerstrue
增强的超时语法:新语法适用于上述属性,也适用于 和 属性。允许的语法如下:com.sun.security.crl.timeoutcom.sun.security.crl.readtimeout
十进制整数将以秒为单位进行解释,并确保向后兼容性。
以 “s” 结尾的十进制整数(不区分大小写,无空格)。这也将在几秒钟内解释。
一个十进制整数值,后面附加了 “ms” (不区分大小写,无空格)。这将解释为毫秒。例如,值 “2500ms” 将是 2.5 秒的超时。
负数、非数字或非十进制值(例如,前面带有“0x”的十六进制值)将被解释为非法值,并默认为 15 秒超时。
无论该值是以秒还是毫秒为单位解释,值 0 都将禁用超时。
security-libs/javax.crypto:pkcs11
➜ SunPKCS11 提供程序中的传统机制检查通过服务类型进行了增强 (JDK-8293345)
支持解密但不支持加密或签名验证但不支持签名的本机 PKCS11 机制被视为旧版,默认情况下处于禁用状态。SunPKCS11 提供程序中的传统机制检查通过服务类型进行了增强。例如,在此修复之前,支持加密、解密和验证但不支持签名的机制被视为旧机制,根本不能使用。修复此漏洞后,由于支持加密和解密,因此可以使用使用此机制的相应 Cipher 服务。但是,相应的 Signature 服务不是,因为仅支持验证。要绕过传统机制检查,请将 PKCS11 提供程序配置属性“allowLegacy”设置为 true。默认值为 false。请注意,调用方有责任确保 legacy 机制不用于不支持的功能。
其他说明
安全库/javax.net.ssl
➜ 不信任由 Camerfirma 根证书锚定并在 2025 年 4 月 15 日之后颁发的 TLS 服务器证书 (JDK-8346587)
JDK 将停止信任 2025 年 4 月 15 日之后颁发并由 Camerfirma 根证书锚定的 TLS 服务器证书,这与 Google、Mozilla、Apple 和 Microsoft 宣布的类似计划一致。
在 2025 年 4 月 15 日或之前颁发的 TLS 服务器证书将继续受信任,直到过期。在该日期之后颁发并由下表中的任何证书颁发机构锚定的证书将被拒绝。
这些限制在 Java 安全套接字扩展 (JSSE) API 的 JDK 实现(提供程序)中强制执行。如果服务器的证书链由下表中的任何证书颁发机构锚定,并且证书是在 2025 年 4 月 15 日之后颁发的,则不会协商 TLS 会话。SunJSSE
应用程序将收到一个异常,并显示一条消息,指示信任锚不受信任,例如:
"TLS Server certificate issued after 2025-04-15 and anchored by a distrusted legacy
Camerfirma root CA: CN=Chambers of Commerce Root - 2008, O=AC Camerfirma S.A.,
SERIALNUMBER=A82743287, L=Madrid (see current address at www.camerfirma.com/address), C=EU"
可以通过从配置文件的 security 属性中删除 “CAMERFIRMA_TLS” 来将 JDK 配置为再次信任这些证书。jdk.security.caDistrustPoliciesjava.security
您还可以使用 JDK 中的实用程序打印出证书链的详细信息,如下所示:keytool
keytool -v -list -alias <your_server_alias> -keystore <your_keystore_filename>
如果链中的任何证书由上表中的根 CA 之一颁发,则输出中列出了该证书,则需要更新证书或联系管理该服务器的组织。
core-svc/tools
➜ JarInputStream 将具有多个清单的已签名 JAR 视为无符号 (JDK-8337494(未公开))
现在,如果该类在 JAR 文件的前两个条目中检测到第二个清单,则该类会将已签名的 JAR 视为未签名。如果设置了系统属性 ,则会记录一条警告消息。JarInputStream"WARNING: Multiple MANIFEST.MF found. Treat JAR file as unsigned."-Djava.security.debug=jar
热点/运行时
➜ JNI_GetCreatedJavaVMs 方法现在将仅返回完全初始化的 VM (JDK-8308341))
在以前的版本中:JNI_GetCreatedJavaVMs
jint JNI_GetCreatedJavaVMs(JavaVM **vmBuf, jsize bufLen, jsize *nVMs);
可以通过数组返回一个 , 该数组仍在初始化过程中,可能尚未准备好使用。现在,这已更改,因此它只会返回完全初始化的 VM。在尝试使用任何条目之前,程序员必须检查返回的 VM 数量 in 是否大于零,这一点很重要。JavaVMvmBufnVMsvmBuf
安全库/javax.security
➜ 仅 POST OCSP 请求的回退选项 (JDK-8328638))
JDK 17 引入了一项性能改进,使 OCSP 客户端可以无条件地对小请求使用 GET 请求,而对其他所有请求执行 POST 请求。RFC 5019 和 RFC 6960 明确允许和推荐这样做。但是,我们已经看到 OCSP 响应程序尽管有 RFC 要求,但无法很好地处理 GET 请求。
此版本引入了一个新的 JDK 系统属性,以允许客户端回退到仅 POST 行为。这将通过使用 .这修改了引入 GET OCSP 请求的原始更改 (JDK-8179503)。默认行为不会更改;该选项默认为 。将选项设置为禁用 GET OCSP 请求。除 (不区分大小写) 以外的任何值都默认为 。-Dcom.sun.security.ocsp.useget={false,true}truefalsefalsetrue
此选项是非标准的,一旦升级了有问题的 OCSP 响应程序,此选项可能会消失。
Bug 修复
此版本还包含 Oracle 关键补丁更新中描述的安全漏洞修复程序。
➜ 17.0.15 中修复的问题:
# JBS 公司 元件 总结
1 JDK-8274893 client-libs 更新 java.desktop 类以使用 try-with-resources
2 型号: JDK-8312518 客户端库/java.awt [macos13] setFullScreenWindow()在macOS 13及以上版本上显示黑屏
3 JDK-8309733 client-libs/javax.accessibility [macOS、辅助功能]VoiceOver:JRadioButton 的公告不正确
4 JDK-8311160 client-libs/javax.accessibility [macOS、辅助功能]VoiceOver:JRadioButtonMenuItem 和 JCheckBoxMenuItem 上没有公告
5 JDK-8283214 client-libs/javax.accessibility [macOS 的]屏幕放大镜不显示 JComboBox 的放大文本
6 JDK-8283387 client-libs/javax.accessibility [macos] a11y:屏幕放大镜不显示选定的选项卡
7 JDK-8339728 client-libs/javax.accessibility [辅助功能,Windows,JAWS]AccessBridge 类的 getKeyChar 方法存在 bug
8 JDK-8332866 客户端库/javax.imageio 启用MEM_STATS时 ImageIO JPEG 解码崩溃
9 JDK-8347911 客户端库/javax.imageio 限制膨胀文本块的长度
10 编号: JDK-8301989 client-libs/javax.swing 中 新的 javax.swing.text.DefaultCaret().setBlinkRate(N) 导致 NPE
11 JDK-8269516 热点/编译器 AArch64:汇编程序清理
12 JDK-8338100 热点/编译器 C2:assert(!n_loop->is_member(get_loop(lca))) 失败:控件不得返回到循环中
13 JDK-8325937 热点/运行时 runtime/handshake/HandshakeDirectTest.java 导致 AArch64 上出现“monitor end should be strictly below the frame pointer”断言失败
14 型号: JDK-8344145 热点/测试 删除任务定义中的 windows_x64_1803_or_later 及其用法
15 型号: JDK-8331959 security-libs/javax.crypto:pkcs11 将 PKCS#11 加密令牌接口更新到 v3.1
16 型号: JDK-8331958 安全库/javax.smartcardio 将适用于 Suse Linux 的 PC/SC Lite 更新到 2.3.0
下载地址
人气软件
Java SE Development Kit(JDK) 17.0.15 官方正式版 Win64
JDK11(Java SE Development Kit 11) v11.0.27 x64 LTS 长期支持
EXT界面图形工具Ext Designer 特别版
JetBrains Pycharm Pro 2025.1 中文专业免费正式版(附汉化包+安
intellij IDEA v2025.1 社区版 官方中文正式版(附汉化包+安装方
myeclipse2016破解工具 v1.0 破解补丁(附安装教程)
Java SE Development Kit(JDK1.8) jdk-8u451-windows-x64.exe 64
Java SE Development Kit(JDK) 17.0.15 官方正式版 Linux64
安卓集成开发工具Android Studio 2024.3.1.13 + SDK 2024.1.09 W
Zend Studio 10.1.0与10.0.1 破解文件与注册码打包
相关文章
-
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.15 官方正式版 Win64资源来源互联网,版权归该下载资源的合法拥有者所有。