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
第一步 查壳,该题是32位,无壳。 第二步 跟进main,发现反汇编不了 通过下图我们可以发现一串类似字符串的东西 第三步 我们看一下汇编 我们可以得到这些信息:flag的长度为27(下面是对本条指令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...

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

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

STM32测测速---编码电机读取速度的计算
1、首先先了解一下计算的公式 速度计算: 轮胎每转一圈的脉冲数取决于编码器的分辨率,可由下面公式进行计算: PPR是电机的线数 以GA25-370电机为例。 图片来源:第四节:STM32定时器(4.JGA25-370霍尔编码器…...
【已解决】服务器无法联网与更换镜像源
目录 问题描述: 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转接口外接鼠标设备
硬件平台:QCS6125 软件平台:Android11 需求:Android设备通过接usb转接线连接鼠标功能屏蔽。 考虑到屏蔽的层面可以从两个层面去做,一个是驱动层面不识别,一个就是Android系统层面不识别加载,本篇只讲后者。…...

HAL库源码移植与使用之RTC时钟
实时时钟(Real Time Clock,RTC),本质是一个计数器,计数频率常为秒,专门用来记录时间。 普通定时器无法掉电运行!但RTC可由VBAT备用电源供电,断电不断时 这里讲F1系列的RTC 可以产生三个中断信号ÿ…...

GIT命令学习 一
📑打牌 : da pai ge的个人主页 🌤️个人专栏 : da pai ge的博客专栏 ☁️宝剑锋从磨砺出,梅花香自苦寒来 ☁️运维工程师的职责:监…...
VS+QT 打包可执行文件.exe
切换成release版本,同时更改项目属性中release配置下的各个属性,确保匹配 重新生成解决方案,将生成的.exe复制到一个空白文件夹中 执行: cd D:\QT\5.12.10\msvc2015_64\binwindeployqt C:\Users\DELL\Desktop\serials\MainWind…...
Android笔试面试题AI答之Activity(2)
答案仅供参考,大部分为文心一言AI作答 目录 1. 请介绍一下Activity 生命周期?1. 完全生命周期2. 可见生命周期3. 前台生命周期4. 配置更改5. 特殊场景 2. 请介绍一下横竖屏切换时Activity的生命周期变化?1.默认行为(未设置androi…...
来自Transformers的双向编码器表示(BERT) 通俗解释
来自Transformers的双向编码器表示(BERT) 目录 1. 从上下文无关到上下文敏感2. 从特定于任务到不可知任务3. BERT:把两个最好的结合起来4. BERT的输入表示5. 掩蔽语言模型(Masked Language Modeling)6. 下一句预测&am…...
代码随想录第十六天|贪心算法(2)
目录 LeetCode 134. 加油站 LeetCode 135. 分发糖果 LeetCode 860. 柠檬水找零 LeetCode 406. 根据身高重建队列 LeetCode 452. 用最少数量的箭引爆气球 LeetCode 435. 无重叠区间 LeetCode 763. 划分字母区间 LeetCode 56. 合并区间 LeetCode 738. 单调递增的数字 总…...

花几千上万学习Java,真没必要!(二十二)
1、final关键字: 测试代码1: package finaltest.com;public class FinalBasicDemo {public static void main(String[] args) {// final修饰基本数据类型变量final int number 5;// 尝试修改number的值,这将导致编译错误// number 10; // …...

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

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...