【Java基础系列】JDK21新特性

这篇具有很好参考价值的文章主要介绍了【Java基础系列】JDK21新特性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
jdk21,s1 java基础,java,开发语言

  • 推荐:kuan 的首页,持续学习,不断总结,共同进步,活到老学到老
  • 导航
    • 檀越剑指大厂系列:全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
    • 常用开发工具系列:罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
    • 数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

1.介绍

JDK 21 已经于 2023 年 9 月 19 日正式发布。本文总结了 JDK 21 发布的新特性。

根据发布的规划,这次发布的 JDK 21 将是一个长期支持版(LTS 版)。LTS 版每 2 年发布一个,上一次长期支持版是 21 年 9 月发布的 JDK 17。不能抱有你强任你强,我用 java8 的思想。

2.版本

主要分为 OpenJDK 版本和 Oracle 版本,下载地址如下:

  • OpenJDK 版本:https://jdk.java.net/21/
  • Oracle 版本:https://www.oracle.com/java/technologies/downloads/

3.JDK21 新特性

  • 序列集合
  • 分代 ZGC
  • 记录模式
  • switch 模式匹配
  • 虚拟线程
  • 弃用 Windows 32 位 x86 移植
  • 不允许动态加载代理
  • 密钥封装机制

4.安装 jdk21

jdk21,s1 java基础,java,开发语言

jdk21,s1 java基础,java,开发语言

5.虚拟线程

将虚拟线程(Virtual Threads)引入 Java 平台。虚拟线程是轻量级线程,可以显著减少编写、维护和观察高吞吐量并发应用程序的工作量。

  1. 轻量级线程管理:虚拟线程不需要底层操作系统线程的支持,因此可以创建数千甚至数万个虚拟线程而不会消耗大量的内存和资源。这使得应用程序可以更高效地管理大量并发任务。
  2. 更快的线程创建和销毁:传统的 Java 线程创建和销毁通常涉及昂贵的操作系统调用,而虚拟线程的创建和销毁成本更低,因此可以更快速地启动和停止线程。
  3. 更好的资源利用:由于虚拟线程可以更轻松地伸缩,因此它们有助于更好地利用现有的系统资源,以处理大规模的并发请求。
  4. 避免死锁和资源争夺:虚拟线程的管理方式可以减少线程之间的竞争和资源争夺,从而降低了死锁和性能问题的风险。
  5. 简化并发编程:虚拟线程的引入使得编写并发程序变得更加容易,开发人员可以专注于业务逻辑而不必过多关注线程管理和同步。
public class Test01 {
    public static void main(String[] args) {
        try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
            IntStream.range(0, 10000).forEach(i -> executor.submit(() -> {
                Thread.sleep(Duration.ofSeconds(1));
                return i;
            }));
        }
    }
}

6.有序集合

在 JDK 21 中,Sequenced Collections 的引入带来了新的接口和方法来简化集合处理。此增强功能旨在解决访问 Java 中各种集合类型的第一个和最后一个元素需要非统一且麻烦处理场景。

Sequenced Collections 引入了三个新接口:

  • SequencedCollection
  • SequencedMap
  • SequencedSet

jdk21,s1 java基础,java,开发语言

绿色方框是新增的 3 个接口,从中可以看到已有集合类的继承关系的变化:

  • List 继承自 SequencedCollection。

  • Deque 继承自 SequencedCollection。

  • LinkedHashSet 实现了 SequencedSet 接口。

  • SortedSet 继承自 SequencedSet。

  • LinkedHashMap 实现了 SequencedMap 接口。

  • SortedMap 继承自 SequencedMap。

有了这 3 个新的顺序集合相关的接口之后,Java 代码可以更清楚地表达顺序集合以及顺序集合上的操作。

这些接口附带了一些新方法,以提供改进的集合访问和操作功能。

/**
 * 序列集合
 *
 * @author : qinyingjie
 * @version : 2.2.0
 * @date : 2023/9/26 01:37
 */
public class Test02 {
    public static void main(String[] args) {
        SequencedCollection<Integer> arr = new ArrayList<>();
        arr.addLast(1);
        arr.addLast(2);
        arr.addLast(3);
        arr.addLast(31);
        arr.addFirst(14);
        System.out.println(arr);
    }
}

第一个和最后一个元素的访问:

在 JDK 21 之前,检索 Java 中集合的第一个和最后一个元素涉及不同的方法和途径,具体取决于集合类型。

下面让我们看一下使用 JDK 21 之前的 JDK API 调用访问第一个和最后一个元素的一些示例:

访问位置 List Deque SortedSet
第一个元素 list.get(0) deque.getFirst() set.first()
最后一个元素 list.get(list.size()-1) deque.getLast() set.last()

可以看到,一个简单的操作,在不同的集合中需要不同的编写方式,非常麻烦!

但在 JDK 21 之后,访问第一个和最后一个元素就方法多了:

对于List, Deque, Set这些有序的集合,访问方法变得统一起来:

  • 第一个元素:collection.getFirst()
  • 最后一个元素:collection.getLast()

首先是 SequencedCollection,该接口的声明如下所示:SequencedCollection 继承自 Collection

interface SequencedCollection<E> extends Collection<E> {
    SequencedCollection<E> reversed();
    void addFirst(E);
    void addLast(E);
    E getFirst();
    E getLast();
    E removeFirst();
    E removeLast();
}

在包含的方法中:

  • reversed 方法返回一个逆序的 SequencedCollection 对象。

  • addFirst 和 addLast 方法分别在集合的起始和结束位置添加新的元素。

  • getFirst 和 getLast 方法分别获取集合的第一个和最后一个元素。

  • removeFirst 和 removeLast 方法分别删除集合的第一个和最后一个元素。

SequencedSet

interface SequencedSet<E> extends Set<E>, SequencedCollection<E> {
    SequencedSet<E> reversed();
}

SequencedMap

SequencedMap 继承自 Map,其中的 entry 有确定的出现顺序。

SequencedMap 中的方法比较多,如下所示:

interface SequencedMap<K,V> extends Map<K,V> {
    SequencedMap<K,V> reversed();
    SequencedSet<K> sequencedKeySet();
    SequencedCollection<V> sequencedValues();
    SequencedSet<Entry<K,V>> sequencedEntrySet();
    V putFirst(K, V);
    V putLast(K, V);

    Entry<K, V> firstEntry();
    Entry<K, V> lastEntry();
    Entry<K, V> pollFirstEntry();
    Entry<K, V> pollLastEntry();
}

具体的方法说明:

  • reversed 方法返回一个 entry 逆序的 SequencedMap。

  • sequencedKeySet 方法返回包含 key 的 SequencedSet。

  • sequencedValues 方法返回包含 value 的 SequencedCollection。

  • sequencedEntrySet 方法返回包含 entry 的 SequencedSet。

  • putFirst 和 putLast 分别在 entry 的最前和最后位置插入名值对。

  • firstEntry 和 lastEntry 分别获取第一个和最后一个 entry。

  • pollFirstEntry 和 pollLastEntry 分别删除第一个和最后一个 entry。

7.记录模式

使用记录模式(Record Patterns)增强 Java 编程语言,以解构记录值。可以嵌套记录模式和类型模式,以实现功能强大、声明性和可组合形式的数据导航和处理。

/**
 * 记录类
 *
 * @author : qinyingjie
 * @date : 2023/9/26
 */
public record Test03(int x, int y) {
}

jdk21,s1 java基础,java,开发语言

static void print(Object o) {
    if (o instanceof Test03(int x, int y)) {
        System.out.println(x + y);
    }
}

8.switch 模式匹配

通过 switch 表达式和语句的模式匹配来增强 Java 编程语言。通过将模式匹配扩展到 switch,可以针对多个模式测试表达式,每个模式都有一个特定的操作,从而可以简洁、安全地表达复杂的面向数据的查询。

/**
 * switch模式匹配
 *
 * @author : qinyingjie
 * @version : 2.2.0
 * @date : 2023/9/26 01:37
 */
public class Test04 {
    public static void main(String[] args) {
        Object obj = "你好";
        Object a = switch (obj) {
            case Integer i -> String.format("int %d", i);
            case String s -> String.format("string %s", s);
            case Double d -> String.format("Double %s", d);
            default -> obj.toString();
        };
        System.out.println(a);
    }
}

觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

jdk21,s1 java基础,java,开发语言文章来源地址https://www.toymoban.com/news/detail-762974.html

到了这里,关于【Java基础系列】JDK21新特性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Java】JDK 21中的虚拟线程以及其他新特性

      目录 一、字符串模板(String Templates) 二、序列化集合(Sequenced Collections) 三、分代ZGC(Generational ZGC) 四、记录模式(Record Patterns) 五、Fibers(纤程) 结论 JDK 21是Java开发工具包的最新版本,它引入了许多令人振奋的新特性,旨在提高开发人员的生产力和代码质量。在本

    2024年02月08日
    浏览(44)
  • 【Java系列】JDK 1.8 新特性之 Lambda表达式

    Lambda是一个匿名函数,我们可以将Lambda表达式理解为一段可以传递的代码(将代码像数据一样传递)。使用它可以写出简洁、灵活的代码。作为一种更紧凑的代码风格,使java语言表达能力得到提升。 结果: ​19:43:39.303 [main] INFO com.chen.test.JAVA8Features.Demo01 - 我是没有使用Lambda表

    2024年02月22日
    浏览(48)
  • 开启JDK 11时代,掌握这些新特性,成为Java开发高手!

    大家好,我是小米,欢迎来到小米科技资讯公众号!今天我将为大家详细介绍 JDK 11 的一些新特性。JDK 11 是 Java 语言的一个重要版本,它带来了许多令人振奋的改进和功能,尤其是在电商应用领域。让我们一起来了解吧! JDK 11 引入了全新的 HTTP 客户端 API,取代了过时的 Ht

    2024年02月11日
    浏览(37)
  • JDK21发布了!面试官:来,谈下jdk21的新特性!

    JDK21 计划23年9月19日正式发布,尽管一直以来都是“版随意出,换 8 算我输”,但这么多年这么多版本的折腾,若是之前的 LTS 版本JDK17你还觉得不错,那 JDK21还是有必要关注一下,因为会有一批重要更新发布到生产环境中,特别是被众人期待已久的虚拟线程,纵然说这东西我

    2024年02月07日
    浏览(52)
  • java JDK(21)安装

    地址:https://www.oracle.com/ 打开后往下滑找到: 傻瓜式向下执行安装即可 注意:cmd跳转到java安装路径运行以下指令安装jre 4 测试是否安装成功 cmd内运行

    2024年02月22日
    浏览(41)
  • 【java】JDK21 要来了

    不过多久,JDK 21 马上就出来了,看来 Java 这几年真的是长进了。 目前 Java 的最新稳定版是 JDK 20,但这是个过渡版,JDK21就是 LTS 版的了,也快要发布了,在今年9月份(也就是2023年9月)就要正式发布了。 但是,猜都不用猜,你肯定还在用 Java 8 吧! 如果说之前的 JDK17你还觉

    2024年02月10日
    浏览(48)
  • JDK21新特性

    JDK8新特性 JDK9新特性 JDK10新特性 JDK11新特性 JDK12新特性 JDK13新特性 JDK14新特性 JDK15新特性 JDK16新特性 JDK17新特性 JDK18新特性 JDK19新特性 JDK20新特性 JDK21新特性 JDK 21 于 2023 年 9 月 19 日 发布,这是一个非常重要的版本,里程碑式。 JDK21 是 LTS(长期支持版),至此为止,目前有

    2024年02月22日
    浏览(48)
  • JDK8,JDK11,JDK17,JDK21及中间版本主要更新特性

    官方地址: https://www.oracle.com/java/technologies/java-se-support-roadmap.html 从上图可以很清晰得可以看出,JDK7,JDK8,JDK11,JDK17,JDK21是长期维护的版本。从目前来看,JDK8到2023年已经有将近10年的历史了,大多数依据JDK8的相关技术内容已经很成熟了,但是大家也看到,JDK在不断地迭代,JD

    2024年02月21日
    浏览(58)
  • Java JDK各版本特性

            Java 8 之前版本中有一些重要特性和改进。以下是其中一些主要特性以及它们发布版本: Java SE 7(发布于2011年): Switch 字符串:允许在 switch 语句中使用字符串。 泛型的类型推断:允许在实例化泛型时,不需要重复指定泛型参数类型。 改进的异常处理:引入了多

    2024年02月11日
    浏览(43)
  • [Java]JDK17新特性

    目录   一、JDK新特性 1.1Java Record 1.1.1Record的使用 1.1.2Instance Methods 1.1.3静态方法 Static Method 1.1.4Record构造方法 1.1.5Record与Lombok 1.1.6Record实现接口 1.1.7Local Record 1.1.8嵌套Record 1.1.9instanceof判断Record类型 1.1.10总结 1.2Switch 1.2.1箭头表达式 1.2.2yield返回值 1.2.3Java Record 1.3Text Block 1.3.1认识

    2024年02月07日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包