当前位置: 首页 > news >正文

Java8-21新特性

简介

由于Java官方最近更新越来越频繁,而长期支持维护的版本LTS版每隔几年才推出一个,大规模商用的JDK只可能选择LTS版,因此这里只简单记录JDK8,11,17,21。

jdk8

  • Lambda表达式: Lambda表达式允许在代码中直接定义匿名函数,这简化了对函数式编程的支持,使代码更简洁、更灵活。它允许在方法中传递代码块,从而实现更加灵活的编程方式。
  • Stream API: StreamAPI提供了一套声明式的方式处理数据集合的框架,可以简化数据处理的复杂性。例如,filter方法用于过滤出所有符合条件的元素,map方法用于将元素转换为另一种类型,sorted方法用于排序等。
  • 接口默认方法: Java 8允许在接口中定义默认方法,这些方法在实现类中可以被继承和覆盖,从而提供了更多的灵活性。
  • 新的日期和时间API: Java 8引入了一个新的日期和时间API,这个API提供了更多的功能,包括处理时区、时间间隔、日期时间格式化等。
  • 方法引用: 方法引用是Lambda表达式的一个简化写法,可以直接引用已存在的方法或构造器。
  • Optional类: Optional是一个容器对象,用于解决可能出现的空指针异常问题。它提供了一种更好的方式来处理可能为null的值。
  • 并行流: Java8引入了并行流,它可以在多个线程上并行地处理集合数据,从而提高程序的性能。
  • 函数式接口: 函数式接口是只有一个抽象方法的接口,可以用作Lambda表达式的目标类型。

jdk11

  • 局部变量类型推断: Java 11正式引入了局部变量类型推断,允许开发者使用var关键字来声明局部变量而无需显式指定类型。这一特性可以简化代码,减少冗余,提高代码的可读性。例如,在声明一个ArrayList时,可以使用var list = new ArrayList();而无需显式指定ArrayList类型。
  • HTTP/2的原生支持: Java 11增加了对HTTP/2的原生支持,使得开发者可以使用标准的Java API来创建HTTP/2的客户端和服务器。HTTP/2通过复用连接、头部压缩和并行请求等技术提升了网络性能,而Java 11的原生支持使得使用HTTP/2更加便捷。
  • 字符串API增强: Java 11对字符串API进行了增强,引入了一些新的方法和功能来处理字符串。例如,isBlank()方法用于检测字符串是否为空白,lines()方法用于将字符串拆分成行,以及strip()、stripLeading()和stripTrailing()等方法用于去除字符串前后的空格。
  • Epsilon垃圾收集器: Java 11引入了一种新的垃圾收集器,名为Epsilon。这是一种无操作(No-Op)的垃圾回收器,用于在测试和性能调优场景下进行使用。
  • ZGC垃圾收集器: Java 11还引入了一种全新的垃圾收集器,名为ZGC。ZGC的设计目标是实现低延迟和高吞吐量,这对于需要快速响应和低停顿时间的应用非常有用。
  • 嵌套访问控制: Java 11引入了嵌套的访问控制,允许在一个类中访问另一个类的私有成员。这增强了类的封装性,并提供了更灵活的方式来组织和访问类成员。

jdk17

  • Switch表达式的增强: Java 17在Switch表达式方面进行了增强,支持Lambda表达式和块语句。这使得Switch语句更加灵活和强大,能够处理更复杂的条件匹配和表达式返回。
  • 新的类型推断机制: Java 17改进了类型推断机制,允许在Lambda表达式和匿名内部类中使用var关键字。这有助于简化代码并减少样板代码的使用。
  • 文本块(Text Blocks): Java 17引入了文本块语法,用于更方便地处理多行字符串,无需使用连接符或转义字符。这使得定义JSON数据或编写其他格式化文本时更加简洁和易读。
  • 密封类(Sealed Classes): Java 17正式转正了密封类,这是一种更加严格和灵活的类继承机制。通过限制哪些类可以继承一个给定的类,密封类增强了代码的安全性和封装性。
  • 类型模式匹配: Java 17引入了类型模式匹配,这是一种更加灵活和简洁的模式匹配方式。它使得代码更加易读和易维护,特别适用于需要进行类型判断和变量赋值的情况。
  • 增强的垃圾回收器: Java 17引入了一种新的ZGC(Z Garbage Collector)垃圾回收器,它具有更快的响应时间和更低的暂停时间,可以更好地支持大型内存和低延迟应用程序。
  • 增强的数据类型: Java 17引入了一些新的数据类型,如预期类型和简单类型,这些类型可以提高编程效率并减少代码量。
  • 改进的安全性: Java 17引入了一些新的安全功能,如默认封装JDK内部类和弃用安全管理器等,以更好地保护应用程序免受潜在的攻击和漏洞。

jdk21

  • 模式匹配 instanceof 操作符: Java 21引入了新的模式匹配 instanceof 操作符,这使得开发者可以通过模式匹配来简化类型转换的代码,提高了代码的可读性和可维护性。
  • 本地模式变量: Java 21允许在方法体内使用本地变量的模式,这样的设计让代码更加简洁易读。
  • switch 表达式的增强: Java 21对 switch 表达式进行了进一步的增强,它支持使用箭头语法和多个表达式作为一个分支的结果,从而提供了更强大和灵活的分支处理能力。
  • raw 字符串: Java 21引入了 raw 字符串,它可以在字符串中保留原始格式,无需再使用转义字符,使得字符串处理更加直观和方便。
  • 数字操作器的改进: Java 21对于数字操作器进行了改进,包括提供了新的数值范围检查操作、新的数值运算方法等,提升了数字处理的效率和准确性。
  • 增强的异步编程: Java 21在异步编程方面进行了改进,提供了更加强大和简化的异步编程功能,包括 CompletableFuture 的新方法和改进的异步流,使得异步编程更加简洁和高效。
  • 字符串模板: Java 21引入了字符串模板,为字符串拼接提供了更灵活、更直观的方式,使得字符串操作更为便捷。
  • 顺序集合: Java 21引入了新的接口来表示具有定义相遇顺序的集合,每个这样的集合都有定义明确的元素顺序,并提供了统一的应用程序接口,用于访问和处理其元素。
  • 记录模式和类型模式: Java 21中的记录模式和类型模式可以嵌套,以实现更强大、声明性和可组合的数据导航和处理形式。

相关文章:

Java8-21新特性

简介 由于Java官方最近更新越来越频繁,而长期支持维护的版本LTS版每隔几年才推出一个,大规模商用的JDK只可能选择LTS版,因此这里只简单记录JDK8,11,17,21。 jdk8 Lambda表达式: Lambda表达式…...

NodeJS系列面试题

大家好,我是有用就扩散,有用就点赞。 有没有写过Koa中间件,说一下中间件原理,介绍下自己写过的中间件 koa本来就是一个轻量级框架,本身支持的功能并不多,功能都是通过中间件来实现不同的需求。开发者可以通…...

QXlsx读写excel

QXlsx读写excel 安装 QXlsx使用 qmake使用 CMake 基本用法1. 写入 Excel 文件2. 读取 Excel 文件 详细用法1. 设置单元格样式2. 合并单元格3. 创建图表4. 设置列宽和行高 完整示例 QXlsx 是一个用于在 Qt 应用中读写 Excel 文件的第三方库。它提供了丰富的 API,可以…...

昇思25天学习打卡营第13天 | mindspore 实现 ShuffleNet 图像分类

1. 背景: 使用 mindspore 学习神经网络,打卡第 13 天;主要内容也依据 mindspore 的学习记录。 2. 迁移学习介绍: mindspore 实现 ShuffleNet 图像分类; ShuffleNet 基本介绍: ShuffleNetV1 是旷视科技提…...

C语言超市管理系统UI界面

以下是部分代码。需要源码的私信 #include<easyx.h> #include<stdio.h> #include<stdlib.h>#define width 1280 #define height 840 #define font_w 35 //字体宽度 #define font_h 90 //字体高度typedef struct node {char name[100];//名字char number[1…...

BUUCTF逆向wp [MRCTF2020]Xor

第一步 查壳&#xff0c;该题是32位&#xff0c;无壳。 第二步 跟进main&#xff0c;发现反汇编不了 通过下图我们可以发现一串类似字符串的东西 第三步 我们看一下汇编 我们可以得到这些信息&#xff1a;flag的长度为27&#xff08;下面是对本条指令cmp edx 27指令的应用…...

Windows版MySQL5.7解压直用(如何卸载更换位置重新安装)

文章目录 停止mysql进程及服务迁移整个mysql文件夹删除data重启计算机重新安装 停止mysql进程及服务 net stop mysql mysqld -remove mysql迁移整个mysql文件夹 删除data 重启计算机 shutdown -r -t 0重新安装 https://blog.csdn.net/xzzteach/article/details/137723185...

详解数据结构之二叉树(堆)

详解数据结构之二叉树(堆) 树 树的概念 树是一个非线性结构的数据结构&#xff0c;它是由 n(n>0)个有限节点组成的一个具有层次关系的集合&#xff0c;它的外观形似一颗倒挂着的树&#xff0c;根朝上&#xff0c;叶朝下&#xff0c;所以称呼为树。每颗子树的根节点有且只…...

Linux----Mplayer音视频库的移植

想要播放视频音乐就得移植相关库到板子上 Mplayer移植需要依赖以下源文件&#xff1a;(从官网获取或者网上) 1、zlib-1.2.3.tar.gz &#xff1a;通用的内存空间的压缩库。 2、libpng-1.2.57.tar.gz :png格式图片的压缩或解压库 3、Jpegsrc.v9b.tar.gz : jpeg格式图片的压…...

STM32测测速---编码电机读取速度的计算

1、首先先了解一下计算的公式 速度计算&#xff1a; 轮胎每转一圈的脉冲数取决于编码器的分辨率&#xff0c;可由下面公式进行计算&#xff1a; PPR是电机的线数 以GA25-370电机为例。 图片来源&#xff1a;第四节&#xff1a;STM32定时器&#xff08;4.JGA25-370霍尔编码器…...

【已解决】服务器无法联网与更换镜像源

目录 问题描述&#xff1a; 1.修改网卡的 DNS1 和 DNS2 2.修改DNS列表 3.重启网络服务 4.切换镜像源 4.1备份原镜像源 4.2下载阿里云镜像源 4.3替换无法使用的域名 4.4刷新软件包缓存 4.5其他镜像源 5.阿里云镜像源开发者社区说明 6.阿里云DNS网址 7.DNS域名服务器…...

android11 屏蔽usb通过otg转接口外接鼠标设备

硬件平台&#xff1a;QCS6125 软件平台&#xff1a;Android11 需求&#xff1a;Android设备通过接usb转接线连接鼠标功能屏蔽。 考虑到屏蔽的层面可以从两个层面去做&#xff0c;一个是驱动层面不识别&#xff0c;一个就是Android系统层面不识别加载&#xff0c;本篇只讲后者。…...

HAL库源码移植与使用之RTC时钟

实时时钟(Real Time Clock&#xff0c;RTC)&#xff0c;本质是一个计数器&#xff0c;计数频率常为秒&#xff0c;专门用来记录时间。 普通定时器无法掉电运行&#xff01;但RTC可由VBAT备用电源供电&#xff0c;断电不断时 这里讲F1系列的RTC 可以产生三个中断信号&#xff…...

GIT命令学习 一

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 ☁️运维工程师的职责&#xff1a;监…...

VS+QT 打包可执行文件.exe

切换成release版本&#xff0c;同时更改项目属性中release配置下的各个属性&#xff0c;确保匹配 重新生成解决方案&#xff0c;将生成的.exe复制到一个空白文件夹中 执行&#xff1a; cd D:\QT\5.12.10\msvc2015_64\binwindeployqt C:\Users\DELL\Desktop\serials\MainWind…...

Android笔试面试题AI答之Activity(2)

答案仅供参考&#xff0c;大部分为文心一言AI作答 目录 1. 请介绍一下Activity 生命周期&#xff1f;1. 完全生命周期2. 可见生命周期3. 前台生命周期4. 配置更改5. 特殊场景 2. 请介绍一下横竖屏切换时Activity的生命周期变化&#xff1f;1.默认行为&#xff08;未设置androi…...

来自Transformers的双向编码器表示(BERT) 通俗解释

来自Transformers的双向编码器表示&#xff08;BERT&#xff09; 目录 1. 从上下文无关到上下文敏感2. 从特定于任务到不可知任务3. BERT&#xff1a;把两个最好的结合起来4. BERT的输入表示5. 掩蔽语言模型&#xff08;Masked Language Modeling&#xff09;6. 下一句预测&am…...

代码随想录第十六天|贪心算法(2)

目录 LeetCode 134. 加油站 LeetCode 135. 分发糖果 LeetCode 860. 柠檬水找零 LeetCode 406. 根据身高重建队列 LeetCode 452. 用最少数量的箭引爆气球 LeetCode 435. 无重叠区间 LeetCode 763. 划分字母区间 LeetCode 56. 合并区间 LeetCode 738. 单调递增的数字 总…...

花几千上万学习Java,真没必要!(二十二)

1、final关键字&#xff1a; 测试代码1&#xff1a; package finaltest.com;public class FinalBasicDemo {public static void main(String[] args) {// final修饰基本数据类型变量final int number 5;// 尝试修改number的值&#xff0c;这将导致编译错误// number 10; // …...

在RK3568上如何烧录MAC?

这里我们用RKDevInfoWriteTool 1.1.4版本 下载地址&#xff1a;https://pan.baidu.com/s/1Y5uNhkyn7D_CjdT98GrlWA?pwdhm30 提 取 码&#xff1a;hm30 烧录过程&#xff1a; 1. 解压RKDevInfoWriteTool_Setup_V1.4_210527.7z 进入解压目录&#xff0c;双击运行RKDevInfo…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:

在 HarmonyOS 应用开发中&#xff0c;手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力&#xff0c;既支持点击、长按、拖拽等基础单一手势的精细控制&#xff0c;也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档&#xff0c…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

NPOI操作EXCEL文件 ——CAD C# 二次开发

缺点:dll.版本容易加载错误。CAD加载插件时&#xff0c;没有加载所有类库。插件运行过程中用到某个类库&#xff0c;会从CAD的安装目录找&#xff0c;找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库&#xff0c;就用插件程序加载进…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...