6、418:Internet-Address Resolution SPI
互联网地址解析 SPI
定义了一个全新的 SPI(service-provider interface),用于主要名称和地址的解析,以便 java.net.InetAddress
可以使用平台之外的第三方解析器。
7、JEP 419: Foreign Function & Memory API (Second Incubator)
外部函数和内存 API(二次孵化中)
改进了 JDK 14 和 JDK 15 引入的 API,通过有效调用外部函数(即 JVM 之外的代码),以及安全地访问外部内存(JVM 之外的内存),这些 API 可以调用本地库和处理本地数据,与 Java 运行环境之外的代码和数据进行交互。
8、JEP 420: Pattern Matching for switch (Second Preview)
switch 模式匹配(二次预览中)
instanceof 模式匹配的概念大家都清楚吧?不清楚的可以看下这篇文章:Java 14 之模式匹配,非常赞的一个新特性!
这次在 JDK 17 中为 switch 语句支持模式匹配,是个什么鬼?来看下面的示例!
老代码写法:
static String formatter(Object o) { String formatted = "unknown"; if (o instanceof Integer i) { formatted = String.format("int %d", i); } else if (o instanceof Long l) { formatted = String.format("long %d", l); } else if (o instanceof Double d) { formatted = String.format("double %f", d); } else if (o instanceof String s) { formatted = String.format("String %s", s); } return formatted; }
模式匹配新写法:
static String formatterPatternSwitch(Object o) { return switch (o) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); default -> o.toString(); }; }
牛逼,直接在 switch 上支持 Object 类型,这就等于同时支持多种类型,使用模式匹配得到具体类型,大大简化了语法量,这个功能还是挺实用的,期待转正,栈长会再详细写一篇,关注公众号:Java技术栈,公众号第一时间推送哦。
往期 Java 新特性教程可以去Java技术栈博客:
https://www.javastack.cn/categories/Java/
9、JEP 421: Deprecate Finalization for Removal
弃用 Finalization
如现在使用 finalize 方法:
已经标识为废弃状态了。。
finalize 大家应该都很清楚吧!
它可以帮助我们主动释放系统底层资源,说实话,没用过,Java 是自动管理内存的,使用它反而会导致潜在的系统安全风险,没帮助不说反而是负担,所以计划移除了。
Finalization 现在默认是开启的,但可以通过下面参数进行禁用:
--finalization=disable
后续的版本会默认禁用,再逐步进行彻底删除,我估计在下一个长期支持版本 JDK 21 中会彻底删除。
不要再用 finalize 了,以后面试问 finalize 和 final、finally 的区别也要好好回答了。
可以考虑使用其他的资源管理技术,如:try-with-resources(JDK 7+) 和 cleaners(JDK 9+),关于这块栈长会再详细写一篇
总结
本文主要介绍了 JDK/Java 18 的 9 个新特性基本面,虽然现在用不上,但了解和学习还是很有必要的,技术更新太快,不进则退。
另外,据最近的调查显示,市面上的主流版本还是 JDK 8,其实是 JDK 11,但现在随着 JDK 17+ 的免费,JDK 8 会逐渐被替代,JDK 17+ 会成为下一代主流版本。
最后,栈长有时间也会继续更新一些 JDK 新特性详细教程,关注公众号Java技术栈第一时间推送哦。如果你想看历史 Java 8+ 系列新特性教程,也可以在公众号菜单中进行阅读。
往期 Java 教程及示例源码:
https://github.com/javastacks/javastack
Oracle JDK 18 下载地址:
https://www.oracle.com/java/technologies/javase-downloads.html
OpenJDK 18 下载地址:
有兴趣的可以下载尝鲜了!!