聊聊主流几个JDK版本:JDK 8、JDK 11、JDK 17 和 JDK 21 的区别

聊聊主流几个JDK版本:JDK 8、JDK 11、JDK 17 和 JDK 21 的区别

    • 一、JDK8
    • 二、JDK11
    • 三、JDK17
    • 四、JDK21

一、JDK8

      JDK 8 发布于 2014 年,是 Java 语言的一个重要里程碑,带来了许多革命性的特性,改变了 Java 开发的方式。

主要更新的特性:

  1. Stream API:stream流,用于处理集合的全新方式,允许开发者用声明式的方式操作数据流,极大地减少了复杂的迭代代码。

    List<Integer> list = Arrays.asList(1,2,3,4,5,6);
    list.stream().filter(i -> i>3).forEach(System.out:println);
    
  2. Lambda 表达式: JDK 8 最重要的特性之一,Java 开始支持函数式编程。它大大简化了代码编写,尤其是在集合框架和流处理(Stream API)中表现尤为突出。

    List<Integer> list = Arrays.asList(1,2,3,4,5,6);
    list.forEach(i -> System.out.println(i));
    
  3. 默认方法允许接口定义带有实现的方法(默认方法),这样接口的演进可以在不破坏现有实现的情况下进行。

    interface TestInterface{default void preHi(){System.out.println("进入测试接口....");}
    }
    
  4. Optional 类:通过 Optional 类解决可能出现的空指针异常,增强了代码的安全性。

    Optional optional = Optional.ofNullable(getName());
    optional.ifPresent(System.out:println);
    

二、JDK11

      JDK 11 于 2018 年发布,是继 JDK 8 之后的首个长期支持版本(LTS)。增加了一些功能改进,并移除了 JDK 8 中的一些过时功能。

主要新特性:

  1. 字符串处理增强:JDK 11 为字符串类增加了许多新的方法,如 isBlank(), strip(), lines() 等。

    String str = "我是itfuture";
    System.out.println(str.isBlank()); 
    
  2. 局部变量类型推断(var):让开发者可以在声明局部变量时使用 var 关键字来推断类型,从而减少冗长的代码。

    var optional = Optional.ofNullable(getName());
    
  3. HttpClient API:JDK 11 标准化了新的 HTTP 客户端 API,简化了 HTTP 请求的处理。

    HttpClient client = HttpClient.newHttpClient();
    HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://www.baidu.com")).build();
    HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println(response.body());
    
  4. ZGC(Z Garbage Collector):ZGC 是一个低延迟垃圾回收器,专为处理大内存应用设计,能够大幅度减少 GC 暂停时间。

  5. JDK 11 移除了许多不再使用的模块,例如 CORBA和JavaFX ,从而让 JDK 变得更为精简。

三、JDK17

      JDK 17 于 2021 年发布,是另一个 LTS 版本。它继续改进语言功能,并引入了一些实验性的增强。

主要新特性:

  1. Switch 表达式:JDK 17 标准化了 switch 表达式,使其可以返回值,并简化了 case 语句的语法

    String sexRes = switch(sex){case 0 -> "女";case 1 -> "男";default "未知";
    };
    
  2. 记录类(Records):记录类提供了一种简洁的方式来声明不可变的数据类,自动生成构造函数、equals()、hashCode() 和 toString()

    public record Point(int x, int y) {}
    
  3. 密封类(Sealed Classes):密封类允许开发者显式地定义可以继承某个类的子类,从而为继承体系提供了更严格的控制。—sealed class XxxXxx permits Xxx,Yyy{}

    public abstract sealed class Shape permits Circle, Square { }
    public final class Circle extends Shape { }
    public final class Square extends Shape { }
    
  4. JEP 356:增强的 Pseudo-Random Number Generators:这个特性引入了新的随机数生成器,提供了更多种类的伪随机数生成算法。

      JDK 17 被认为是继 JDK 11 之后的另一个重大里程碑版本,提供了更多的语言特性和工具,特别是在提升代码可读性和表达能力方面。

四、JDK21

      JDK 21 于 2023 年发布,进一步推动了 Java 的现代化和性能提升。
      JDK 21 并没有重大语言特性上的变化,但它在性能、工具支持和开发者体验方面做了大量改进。

主要新特性:

  1. 虚拟线程(Project Loom):引入了轻量级的虚拟线程,极大地简化了并发编程。开发者可以创建数百万个线程,而不必担心传统线程的开销问题

    Thread.startVirtualThread(() -> {System.out.println("Running in a virtual thread");
    });
  2. 模式匹配(Pattern Matching)扩展:JDK 21 继续改进模式匹配,特别是在 switch 表达式中引入了更多的匹配能力。

    switch (obj) {case Integer i -> System.out.println("Integer: " + i);case String s -> System.out.println("String: " + s);
    }
  3. JEP 434:结构化并发:通过结构化并发 API 简化并发任务的管理,帮助开发者更好地组织并行任务。

  4. JEP 439:值对象(Value Objects):JDK 21 引入了值对象,旨在简化只关心值、不关心对象身份的类的创建。

      由这些版本的变化,我们可以很清楚的看到Java社区的丰富以及Java语言的不断进步,与时俱进。但是呢,选择合适的 JDK 版本取决于项目的需求和应用场景,如果你追求长期支持,可以优先考虑 JDK 11 或 JDK 17,而如果想体验 Java 语言的最新特性,JDK 21 将是你的不二选择。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/477502.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python代码制作数据集的测试和数据质量检测思路

前言 本文指的数据集为通用数据集&#xff0c;并不单是给机器学习领域使用。包含科研和工业领域需要自己制作数据集的。 首先&#xff0c;在制作大型数据集时&#xff0c;代码错误和数据问题可能会非常复杂。 前期逻辑总是简单的&#xff0c;库库一顿写&#xff0c;等排查的时…

Windows系统编程 - 进程遍历

文章目录 前言进程的遍历CreateToolhelp32SnapshotProcess32FirstProcess32Next进程遍历 总结 前言 各位师傅好&#xff0c;我是qmx_07&#xff0c;今天给大家讲解进程遍历的相关知识点 进程的遍历 快照&#xff1a;使用vmware虚拟机的时候&#xff0c;经常需要配置环境服务…

【GD32】(三) ISP基本使用

0 前言 有一块GD32的板子不知道为啥用着用着就下载不了程序了&#xff0c;没办法&#xff0c;只能另寻他法。作为STM32的平替&#xff0c;GD32的功能和STM32基本是一致的&#xff0c;所以也可以使用ISP来下载程序。于是就开始复活这块板子。 1 BOOT模式 对于熟悉STM32开发的人…

【SKFramework框架核心模块】3-2、音频管理模块

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群&#xff1a;398291828小红书小破站 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 【Unity3D框架】SKFramework框架完全教程《全…

开源项目-如何更好的参与开源项目开发

开源之谜-提升自我核心竞争力 一、寻找适合自己的开源项目二、像坐牢一样闭关修炼三、最后的实践 开源代码对所有人开放&#xff0c;开发者可以基于现有代码进行扩展和创新&#xff0c;而不是从零开始&#xff0c;参与开源项目可以提升自我的技术能力&#xff0c;丰富个人的经历…

利用c语言详细介绍下插入排序

插入排序&#xff0c;被称为直接插入排序。它的基本思想是将一个记录插入到已经排好序的有序表中&#xff0c;从而一个新的、记录数增 1 的有序表。 一、图文介绍 我们还是使用数组【10&#xff0c;5&#xff0c;3&#xff0c;20&#xff0c;1]&#xff0c;排序使用升序的方式&…

STL——string类常用接口说明

目录 一、string类的介绍 二、string类常用接口的使用说明 1.成员函数 ​编辑 2.迭代器 3.容量 一、string类的介绍 下面是string类的文档对string类的介绍 1.string类是表示字符序列的对象 2.标准字符串类通过类似于标准字符容器的接口为此类对象提供支持&#xff0c…

Excel的图表使用和导出准备

目的 导出Excel图表是很多软件要求的功能之一&#xff0c;那如何导出Excel图表呢&#xff1f;或者说如何使用Excel图表。 一种方法是软件生成图片&#xff0c;然后把图片写到Excel上&#xff0c;这种方式&#xff0c;因为格式种种原因&#xff0c;导出的图片不漂亮&#xff0c…

2024年亚太地区数学建模大赛A题-复杂场景下水下图像增强技术的研究

复杂场景下水下图像增强技术的研究 对于海洋勘探来说&#xff0c;清晰、高质量的水下图像是深海地形测量和海底资源调查的关键。然而&#xff0c;在复杂的水下环境中&#xff0c;由于光在水中传播过程中的吸收、散射等现象&#xff0c;导致图像质量下降&#xff0c;导致模糊、…

【数据分享】2024年我国省市县三级的住宿服务设施数量(8类住宿设施/Excel/Shp格式)

宾馆酒店、旅馆招待所等住宿服务设施的配置情况是一个城市公共基础设施完善程度的重要体现&#xff0c;一个城市住宿服务设施种类越丰富&#xff0c;数量越多&#xff0c;通常能表示这个城市的公共服务水平越高&#xff01; 本次我们为大家带来的是我国各省份、各地级市、各区…

一文学习Android系统核心服务ServiceManager

ServiceManager 是 Android 系统中核心的系统服务注册与发现机制&#xff0c;它在 Android Framework 层扮演服务注册中心的角色。它允许进程通过它注册、查询和使用系统服务&#xff0c;实现进程间通信 (IPC) 的基础架构。 ServiceManager 的作用 服务注册&#xff1a;应用程…

DMA理论篇

DMA理论篇 简介 传统的数据传输都是需要CPU来实现&#xff0c;从一个地方拷贝到另一个地方&#xff1b;而DMA(Direct Memory Access)则不完全依赖CPU&#xff0c;DMA更新芯片SOC的一个控制器&#xff0c;他可以控制数据从内存中传输到另一个地方(外设、soc其它模块)&#xff…

SpringBoot 集成 html2Pdf

一、概述&#xff1a; 1. springboot如何生成pdf&#xff0c;接口可以预览可以下载 2. vue下载通过bold如何下载 3. 一些细节&#xff1a;页脚、页眉、水印、每一页得样式添加 二、直接上代码【主要是一个记录下次开发更快】 模板位置 1. 导入pom包 <dependency><g…

IDEA怎么定位java类所用maven依赖版本及引用位置

在实际开发中&#xff0c;我们可能会遇到需要搞清楚代码所用依赖版本号及引用位置的场景&#xff0c;便于排查问题&#xff0c;怎么通过IDEA实现呢&#xff1f; 可以在IDEA中打开项目&#xff0c;右键点击maven的pom.xml文件&#xff0c;或者在maven窗口下选中项目&#xff0c;…

webStorm安装

一、webStorm安装 简介 Webstorm是一款非常受欢迎的优秀开发工具&#xff0c;跟vscode同誉为卧龙凤雏编辑器&#xff0c;是97%开发人员的理想编辑器&#xff0c; 尤其是webstorm&#xff0c;焕然一新的外观&#xff0c;新的导航功能&#xff0c;githob拉取等&#xff0c;更是备…

案例研究|阿特斯的JumpServer分布式部署和多组织管理实践

苏州阿特斯阳光电力科技有限公司&#xff08;以下简称为阿特斯&#xff09;是一家集太阳能光伏组件制造和为全球客户提供太阳能应用产品研发、设计、制造、销售的专业公司。 阿特斯集团总部位于加拿大&#xff0c;中国区总部位于江苏省苏州市。通过全球战略和多元化的市场布局…

数字信号处理(Digital Signal Procession)总结

0、导入库 import numpy as np import matplotlib.pyplot as plt import numpy as np from matplotlib import pyplot as plt from scipy.signal import find_peaks1、创建时域信号 创建时间序列 T 0.01 # 采样间隔 fs 100 # 采样频率 L 1000 # 采样点数 tl 0 # 起始时间…

医院信息化与智能化系统(22)

医院信息化与智能化系统(22) 这里只描述对应过程&#xff0c;和可能遇到的问题及解决办法以及对应的参考链接&#xff0c;并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图&#xff0c;可以试试PlantUML&#xff0c;告诉GPT你的文件结构&#xff0c;让他给你对应…

01Web3.0行业

目录 一、什么是Web 3.0? 二、Web 1.0 vs Web 2.0 vs Web 3.0 三、为什么选择Web 3.0 四、从法律角度观察Web 3.0 1. Web 3.0前时代的数字身份 问题1&#xff1a;个人信息的过度收集 问题2&#xff1a;个人信息的泄露和滥用 2. Web 3.0的解决方案及其法律问题 问题一&…