当前位置:   article > 正文

劲爆:Java 18 正式发布,默认 UTF-8,finalize 被弃用。。别再乱用了_finalize已经废弃

finalize已经废弃

上一版:重磅!JDK 17 发布,Oracle 宣布从 JDK 17 开始正式免费。。


JDK 18 正式发布

JDK 17 刚发布半年,JDK 18 又如期而至,JDK 版本号这算是成年了?

JDK 18 发布了,栈长继续为大家解读!

JDK 18 延续了 JDK 17 开创的免费策略,但,JDK 18~20 不是长期支持版本,注意不要用在生产。

最新 Oracle Java 支持路线图:

JDK 18 新特性一览

ID特性说明
1400:UTF-8 by Default默认 UTF-8
2408:Simple Web Server简单 Web 服务器
3413:Code Snippets in Java API Documentation简化文档代码片段
4416:Reimplement Core Reflection with Method Handles重新实现反射核心机制
5417:Vector API (Third Incubator)矢量 API(三次孵化中)
6418:Internet-Address Resolution SPI互联网地址解析 SPI
7419:Foreign Function & Memory API (Second Incubator)外部函数和内存 API(二次孵化中)
8420:Pattern Matching for switch (Second Preview)switch 模式匹配(二次预览中)
9421:Deprecate Finalization for Removal弃用 Finalization

JDK 18 这个版本提供了 9 个增强功能,栈长接下来为大家一一解读。

关注公众号Java技术栈,持续分享最新、最主流的Java技术~

JDK 18 新特性详细介绍

1、400:UTF-8 by Default

默认 UTF-8

没错,将 UTF-8 指定为标准 Java API 的默认字符集。

在 JDK 17 及更早版本中,默认字符集是在 Java 虚拟机运行时才确定的,取决于不同的操作系统、区域设置等因素,因此存在潜在的风险。

从这个版本开始,依赖于默认字符集的 API 会在所有实现、操作系统、语言环境和配置中保持一致。

可以使用以下命令查看当前 JDK 的默认字符集:

java -XshowSettings:properties -version 2>&1 | grep file.encoding
    file.encoding = UTF-8
    file.encoding.pkg = sun.io
  • 1
  • 2

在 JDK 中通过下面 API 获取当前 JDK 的默认字符集:

Charset.defaultCharset()

    我们都知道字符集一致的重要性,所有地方默认字符集保持一致真的非常有用。

    2、408:Simple Web Server

    简单 Web 服务器

    提供一个命令行工具启动的迷你 Web 服务器:

    $ jwebserver
    Binding to loopback by default. For all interfaces use "-b 0.0.0.0" or "-b ::".
    Serving /cwd and subdirectories on 127.0.0.1 port 8000
    URL: http://127.0.0.1:8000/
    • 1
    • 2
    • 3

    只限于静态文件,类似于 Apache、Nginx 的静态服务器功能,不过它要更简单,功能极少,设置简单。

    简单的、临时的测试用用我觉得还行,不用去额外下载和配置其他的服务器组件,以后用 Java 就能搞定了,有兴趣的可以研究试用下!

    3、413:Code Snippets in Java API Documentation

    Java API 文档中支持 Snippets 代码片段

    增加了 @snippet 标签,简化 API 文档中包含示例源代码的情况。

    使用语法:

    {@snippet ...}

    以前是这样写的:

    /**
     * <pre>{@code
     *     String[] y = x.toArray(new String[0]);
     * }</pre>
     *
     */
    • 1
    • 2
    • 3
    • 4
    • 5

    JDK 18 中可以这样:

    /**
     * The following code shows how to use {@code Optional.isPresent}:
     * {@snippet :
     * if (v.isPresent()) {
     *     System.out.println("v: " + v.get());
     * }
     * }
     */
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    4、416:Reimplement Core Reflection with Method Handles

    重新实现反射核心机制(Method Handles)

    JDK 18 使 Method Handles 作为反射的底层机制,重新实现了 java.lang.reflect.Method、Constructor、Field 组件,将大大降低反射 API 的维护和开发成本。

    另外,最新最全的 Java 反射面试题整理好了,微信搜索Java面试库小程序在线刷题。

    5、417:Vector API (Third Incubator)

    矢量 API(三次孵化中)

    Vector API 这是一个新的初始迭代孵化器模块,模块包:jdk.incubator.vector,用于表示在运行时可靠地编译到支持的 CPU 架构上的最佳矢量硬件指令的矢量计算,矢量运算可以提供优于等效标量计算的性能,并且在机器学习、人工智能和密码学等领域非常普遍。

    本次增强的 API 允许以一种在运行时,可靠地编译为支持的 CPU 架构上的最佳向量指令的方式表达向量计算。

    下个版本会转正吗?

    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 14JDK 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;
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    模式匹配新写法:

    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();
        };
    }
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    牛逼,直接在 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+),关于这块栈长会再详细写一篇,关注公众号:Java技术栈,公众号第一时间推送哦。

    总结

    本文主要介绍了 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 下载地址:

    https://jdk.java.net/18/

    有兴趣的可以下载尝鲜了!!

    老铁们,点个在看、转发支持下哦,也欢迎分享给你的更多朋友们~

    关注Java技术栈,持续分享最新、最主流的Java技术~

    版权声明: 本文系公众号 "Java技术栈" 原创,转载、引用本文内容请注明出处,抄袭、洗稿一律投诉侵权,后果自负,并保留追究其法律责任的权利。

    近期热文推荐:

    1.1,000+ 道 Java面试题及答案整理(2022最新版)

    2.劲爆!Java 协程要来了。。。

    3.Spring Boot 2.x 教程,太全了!

    4.别再写满屏的爆爆爆炸类了,试试装饰器模式,这才是优雅的方式!!

    5.《Java开发手册(嵩山版)》最新发布,速速下载!

    觉得不错,别忘了随手点赞+转发哦!

    声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/629534
    推荐阅读
    相关标签
      

    闽ICP备14008679号