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”,根据安装向导提示,选择“下一步”

Java SE Development Kit(JDK) 17.0.1 官方正式版 Win64

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

Java SE Development Kit(JDK) 17.0.1 官方正式版 Win64

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

Java SE Development Kit(JDK) 17.0.1 官方正式版 Win64

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

Java SE Development Kit(JDK) 17.0.1 官方正式版 Win64

安装 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}

下载地址

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。