【jdk】jdk11 jdk17 jdk21的新特性

2024-06-22 03:36
文章标签 jdk jdk11 jdk17 jdk21 特性

本文主要是介绍【jdk】jdk11 jdk17 jdk21的新特性,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言:按照博主的个人理解,一般来说 除了jdk8时代 说jdk8的新特性是特指jdk8这一个版本的特性,之后例如jdk11 jdk17新特性 都是泛特性
什么意思呢? 比如jdk11新特性,一般是指jdk9——jdk11 这一个泛版本的所有新特性,就jdk9引入的 List.of Map.of等api 我们也统称是jdk11的新特性

文章目录

  • 为什么大家只提及这几个版本
  • jdk11主要新特性
  • jdk17主要新特性
  • jdk21主要新特性

为什么大家只提及这几个版本

为什么我们很少听到jdk9,jdk10…等其它版本呢
个人认为被大家广为流传的版本需要同时满足以下两点:

  1. 有重大更新的版本 比如典型的jdk8时代带来的lambda等特性
  2. 是LTS版本 (长期支持版本) 作为企业 肯定也需要考虑这点

jdk11主要新特性

这里说的是泛特性 即jdk9——jdk11
主要例举博主接触到的,应该也是我们比较常见的一些情况

  1. 新增了List.of , Map.of 等api,简化了代码 (jdk9特性)
    (List.of()类似Arrays.asList , 都是不可删除的list)

  2. stream流api更新
    在旧版本的jdk中,stream流有个致命的缺点 不能break! 这使得我们在需要break的时候及其不方便, 有了takeWhile方法 可以一定程度上实现break。

   	    List<Integer> list = Stream.of(4, 2 ,3).takeWhile(i->(i<3)).toList();// 输出空listSystem.out.println(list);List<Integer> list1 = Stream.of(1, 2 ,3).takeWhile(i->(i<3)).toList();// 输出 [1,2]System.out.println(list1);

但是注意!它是按顺序来执行的,如果第一个元素都不符合 就直接break了
我们可以举个例子

List<String> nameList = List.of("小帅","孟秋与你","小丑");
// break写法:
for(String name : nameList){if("孟秋与你".equals(name)){// 返回一个新的数组return List.of(name);break;}
}//  但是如果用takeWhile 将会返回空数组!
// 因为第一个元素"小帅"就不符合我们的判断条件 直接退出了
  1. jdk部分模块被移除 需要单独引入

     例如javaFx被移除 (主要是桌面开发相关的api)jaxb涉及的也被移除 (这个主要是xml相关的api)rmi 相关的包也被移除 (这个日常开发基本用不到 ,对我们来说主要是学习如何防止被rmi远端执行 例如著名的log4j事件 黑客就是通过rmi执行的)其它模块的移除...
    
  2. 默认垃圾收集器的变化
    说的就是G1 gc收集器

  3. 接口里面支持private方法
    这个可以视为jdk8新增default 方法的一个补充,比如default方法过于庞大,这个时候就可能需要一个private方法抽取逻辑了。

public interface Test{default void test() {// do othertestHandle();}private void testHandle() {// do other}
}
  1. 语法的简单变化
    这个基本就是泛型加一个类型减一个类型的事了,具体情况不记得了,之前遇过一次,不过影响不大 遇到的话 启动代码的时候如果报错就知道了,非常容易判断并修改的

jdk17主要新特性

同样指的是泛特性 jdk12——jdk17

  1. NPE优化提示
    这个可以说非常友好了, 在链式调用时 会准确提示NPE的位置
    在这里插入图片描述
    旧版jdk (此处指 jdk<= 11) 的提示:
    在这里插入图片描述

  2. 文本块
    这个在编写长文本的时候非常有用
    旧:

   return "<html>\n" +" <body>\n" +" <p>csdn: 孟秋与你</p>\n" +" </body>\n" +"</html>";

新:

    return """<html><body><p>csdn: 孟秋与你</p></body></html>""";
  1. stream流Api进一步更新
    可以直接使用 toList()方法了,不需要使用collect(Collectors.toList())这么麻烦
        List<Integer> list = Stream.of(4, 2 ,3).takeWhile(i->(i<3)).toList();
  1. switch优化
    旧写法 每个分支都要写break 及其臃肿
 public String test() {String res = "";switch (1){case 1:res="打工";break;// ....case 6:res="休息";break;default:res = "打工";break;}return res;}

新写法:
(注意语法 箭头指向的内容即表明了返回值 所以是在return的时候使用该写法)

    public String test() {return switch (1) {case 1 ->"上班";case 6 -> "休息";default -> "上班";};}

jdk21主要新特性

在这里插入图片描述
上面是官方文档提及的,博主简单概述一下:

  1. 虚拟线程
    这个是最大的新特性了,将操作系统的线程 提到了jvm层面管理,线程开销极大的缩减了,要说怎么理解这个虚拟线程,博主个人把它当做一个操作系统线程的缓存池来理解,智者见智。
Runnable runnable = () -> {System.out.println("Hello, 孟秋与你");
};// 使用静态构建器方法
Thread virtualThread = Thread.startVirtualThread(runnable);
  1. 新的字符串方法
    引入了一些新的字符串方法,进一步增强了字符串操作的能力,如字符串格式化和更高效的字符串比较​

  2. Sequenced Collections
    JDK 21增加了有序集合(Sequenced Collections)的支持,这是一个新的集合类型,元素有固定的遇见顺序,并且提供了一组统一的操作。新的接口包括SequencedCollection、SequencedSet和SequencedMap​ ​。

  3. ZGC垃圾收集器

  4. record 增强
    现在基本都用lomhok了 博主没去看这个

  5. 模式匹配增强(Pattern Matching Enhancements)
    模式匹配得到了进一步增强,特别是在switch语句中的应用。这使得代码更加简洁和表达力更强​ 。

  6. 性能、安全的优化,方法的弃用之类的优化

这篇关于【jdk】jdk11 jdk17 jdk21的新特性的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1083180

相关文章

java8的新特性之一(Java Lambda表达式)

1:Java8的新特性 Lambda 表达式: 允许以更简洁的方式表示匿名函数(或称为闭包)。可以将Lambda表达式作为参数传递给方法或赋值给函数式接口类型的变量。 Stream API: 提供了一种处理集合数据的流式处理方式,支持函数式编程风格。 允许以声明性方式处理数据集合(如List、Set等)。提供了一系列操作,如map、filter、reduce等,以支持复杂的查询和转

在 Java 中,JDK、JRE、JVM 分别代表什么,有何关系和区别?

在Java开发的世界中,我们会经常听到JDK、JRE和JVM这三个词。它们都与Java的运行环境以及Java程序的编译和运行有关,它们之间也存在一些关联性和区别。 什么是JDK、JRE和JVM 我们来看它们分别是什么。 JDK,全称Java Development Kit,即Java开发工具包。顾名思义,JDK是用于Java开发的一套工具包,里面包含了Java的编译器javac、

最新版本的JDK安装和配置(Java SE 10.0.2)

1.废话少说,要么百度JDK,要么直接点传送门http://www.oracle.com/technetwork/java/javase/downloads/index.html。这里需要说的JDK包含JRE,打个比方,JDK就是厨房,包含各种工具,而JRE是运行环境,就是锅。所以下载的话,直接下载最新JDK最好。然后根据你的系统位数选择版本。我的是64bit. 2.点击1的右边中间的【JD

国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter

国产数据库 - 内核特性 - CloudberryDB中的Runtime Filter 今年5月份GreenPlum官方将GitHub仓库代码全部删除,各个分支的issues和bugs讨论等信息全部清除,仅将master分支代码进行归档。对于国内应用GPDB的用户来说,这是一个挑战性事件,对与后期维护、升级等都变得非常困难。有幸HashData开源了基于GP衍生版本CloudberryDB版本,

物联网系统运维——移动电商应用发布,Tomcat应用服务器,实验CentOS 7安装JDK与Tomcat,配置Tomcat Web管理界面

一.Tomcat应用服务器 1.Tomcat介绍 Tomcat是- -个免费的开源的Ser Ivet容器,它是Apache基金会的Jakarta 项目中的一个核心项目,由Apache, Sun和其他一 些公司及个人共同开发而成。Tomcat是一一个小型的轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。 在Tomcat中,应用程序的成部署很简

Hbase特性介绍

1、什么是Hbase。 是一个高可靠性、高性能、列存储、可伸缩、实时读写的分布式数据库系统。 适合于存储非结构化数据,基于列的而不是基于行的模式 如图:Hadoop生态中HBase与其他部分的关系。 2、关系数据库已经流行很多年,并且Hadoop已经有了HDFS和MapReduce,为什么需要HBase? Hadoop可以很好地解决大规模数据的离线批量处理问题,但是,受限于Hadoo

【2024最新版】Java JDK安装配置全攻略:图文详解

目录 1. 引言2. 准备工作2.1 **确定操作系统**2.2 **检查系统要求**2.3 **下载JDK安装包**3. 安装步骤(以Windows系统为例)4. 配置环境变量4.1 jdk配置验证4.2 **配置JAVA_HOME环境变量**4.3 **配置Path环境变量**4.4 验证jdk是否配置成功 5. 结语 1. 引言 随着技术的不断发展和更新,Java作为世界上

由于jdk版本问题引起的Unsupported major.minor version 52.0

tomcat启动报错 错误日志信息: 三月 01, 2019 9:47:02 下午 org.apache.catalina.core.ApplicationContext log INFO: Initializing Spring root WebApplicationContext 三月 01, 2019 9:47:08 下午 org.apache.catalina.core.Standard

Html5 与CSS3中的新特性

Html5 绘画 canvas 元素   用于媒介回放的 video 和 audio 元素   本地离线存储 localStorage 长期存储数据,浏览器关闭后数据不丢失;   sessionStorage 的数据在浏览器关闭后自动删除   语意化更好的内容元素,比如 article、footer、header、nav、section   表单

深入解析Java的三大特性(下)

深入解析Java的三大特性(下) 在上一篇文章中,我们详细介绍了Java的三大特性之一——封装的概念、实现方式及其优点。本文将继续探讨Java的另两大特性:继承和多态。 2. 继承(Inheritance) 2.1 什么是继承 继承是面向对象编程中的一个重要特性,它允许一个类(子类)继承另一个类(父类)的属性和方法。通过继承,子类可以复用父类的代码,减少重复代码的编写,并且可以扩展和重写父