JDK15 新特性详解,2020-09-15 正式发布

news2024/11/29 5:44:01

预览版:该功能在当前版本可以使用,如果效果不是很好的话,可能以后的其他版本就会删去该功能。

最终版:该功能在之前版本效果很好,之后的每个版本中都会存在该功能。

Java 5 中的泛型,Java 8 中的 Lambda 和 Java 9 中的模块。以下是各个 JDK 版本升级的 JEP 数量

1、在 CharSequence 中添加了 isEmpty 默认方法

定义isEmpty用于测试字符序列是否为空的默认方法,CharSequence::isEmpty可以用
作方法参考。实现的类java.lang.CharSequence和定义isEmpty方法的另一个接口应注意
这一点,因为可能需要对其进行修改以覆盖isEmpty方法。

2、支持 Unicode 13.0

此版本将Unicode支持升级到13.0,其中包括:java.lang.Character13.0水平,
这增加了13.0 5930个字符,总共143859个字符类支持Unicode字符数据库。这些增加的内容包括4个新脚本,总共154个脚本,
以及55个新表情符号字符。

3、TreeMap 新方法

TreeMap 重新实现压倒性一切的如:putIfAbsent、computeIfAbsent、computeIfPresent、compute、merage

举例说明 putIfAbsent 等价于如下:

default V putIfAbsent​(K key, V value)

V v = map.get(key);
if (v == null){
     v = map.put(key, value);
}

return v;

4、文本块(最终版)

优势:简化了编写 Java 程序的任务,同时避免了常见情况下的转义序列;增强 Java 程序中表示用非 Java 语言编写的代码的字符串的可读性。

String html = """ <html> <body> <p>Hello, world</p> </body> </html> """;

String query = “”"
SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB`
WHERE `CITY` = ‘INDIANAPOLIS’
ORDER BY `EMP_ID`, `LAST_NAME`;
“”";

5、隐藏类

基于 JVM 构建的许多语言实现都依靠动态类生成来提高灵活性和效率。

详情可见 --> JEP371

6、 GC 回收期

淘汰 - XXUseAdaptiveGDBoundary

7、改进的序列化处理,IO

使用java.io.ObjectInputStream.setObjectInputFilter方法设置序列化过滤器时,必
须在从流中读取任何对象之前调用它。如果调用readObject或方法readUnshared,则该
setObjectInputFilter方法将引发IllegalStateException。

8、**优化空子字符串处理,**String.substring

在某些情况下,String.substring返回“”,但在子字符串长度为零时,在所有情况下都可以进行改进。

之前逻辑是返回 “”,需要增加一个新的地址,而目前为 null,如下

public static String stripLeading(byte[] value) {
int left = indexOfNonWhitespace(value);
if (left == value.length) {
return “”;
}
return (left != 0) ? newString(value, left, value.length - left) : null;
}

9、支持货币分组分隔符

DecimalFormat / DecimalFormatSymbols类现在可以处理货币值的分组分隔符。例如,
在奥地利(de-AT语言环境)中使用的德语语言的货币分组分隔符为“。”,而在其他德语语言环境
中的货币分组分隔符为“。”。

**10、**time 用默认值覆盖本地化值

java.time.format.DateTimeFormatter.localizedBy(Locale)方法现在采用默认
的语言环境值,例如Chronology和/或DecimalStyle指定的语言环境参数。

例如,在先前的 JDK 版本中:

jshell> DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL)
.localizedBy(Locale.forLanguageTag(“fa”))
.format(LocalDate.now())
$3 ==> “جمعه 1 مهٔ 2020”

数字是阿拉伯文(西文)数字,在 JDK 15 中:

jshell> DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL)
.localizedBy(Locale.forLanguageTag(“fa”))
.format(LocalDate.now())
$3 ==> “جمعه ۱ مهٔ ۲۰۲۰”

这些数字使用扩展阿拉伯语 - 印度数字,因为它是波斯语区域设置的默认编号系统。

11、time ValueRange.of

ValueRange.of(long min,long maxSmallest,long maxLargest),如果
最小值大于最小最大值,则将引发异常。但是,仅当最小值大于最大最大值时才会发生例外。

12、性能改进 InflaterOutputStream.write

1、InflaterOutputStream(OutputStream out, Inflater infl, int bufLen)允
许指定要使用的解压缩器和缓冲区大小。
    2、InflaterOutputStream.write(byte[] b, int off, int len)
正在使用最大512字节的缓冲区大小写入数据。
    3、从JDK 15开始,通过InflaterOutputStream(OutputStream out, Inflater
infl,int bufLen)所指定的缓冲区大小将在对的调用中使用InflaterOutputStream.write(
byte[] b,int off, int len)。如果在调用InflaterOutputStream 构造函数时未指定缓冲
区大小,则默认为512字节。

13、集合性能提升(Better Listing of Arrays)

复制集合的首选方法是使用“复制构造函数”。例如,要将集合复制到新的ArrayList中,
可以编写new ArrayList<>(collection)。在某些情况下,可能会制作其他临时副本,如
果要复制的集合非常大,则应用程序应(意识到/监视)制作副本所需的大量资源。

14、GC:G1 优化

针对 G1 堆区域大小的改进

默认的堆区域大小计算已更改为默认情况下返回较大的区域。计算仍以2048个区域为目标,
但是两个方面发生了变化,这些更改提高了启动和运行时性能
    1、仅考虑最大堆大小。旧的计算还考虑了初始堆大小,但是当未设置堆大小时,这可能会
产生意外的行为。
    2、区域大小四舍五入到最接近的2的幂,而不是减小。在最大堆大小不是2的幂的情况下,
这将返回更大的区域大小。

15、ZGC 一种可扩展低延迟垃圾收集器

Z垃圾收集器(ZGC)现在可以在生产中使用,不再标记为实验功能。通过使用-XX:+UseZGC命
令行选项启用ZGC

16、模式匹配的 instanceof(第二预览版)

提供模式匹配来 增强 Java 编程语言 instanceof

if (obj instanceof String s) {
    _// can use s here
_ } else {
// can’t use s here }

17、Record(第二预览版)

@Data @AllArgsConstructor class Group {
_// 组名
_ private String name;
_// 人数
_ private int nums;
}

使用它可以替代构造器、equal 方法、toString 方法,hashCode 方法

Point(String name,int nums){}

Java 语言中一种新型的类型声明。像枚举一样 enum, record 是类的受限形式。声明其表示形式,并提交与该表示形式匹配的 API。记录放弃了类通常享有的自由:将 API 与表示分离的能力。作为回报,记录获得了很大程度的简洁性。

18、 Sealed Classes(第一预览版)

通过_密封的类和接口_增强 Java 编程语言。密封的类和接口限制可以扩展或实现它们的其他类或接口。

详细参考 --》起因

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux云服务器下怎么重置MySQL8.0数据库密码

文章目录一、修改my.cnf配置文件为mysql免登陆二、免密登陆mysql三.给root用户重置密码1、首先查看当前root用户相关信息&#xff0c;在mysql数据库的user表中2、把root密码置为空3、退出mysql&#xff0c;删除/etc/my.cnf文件中添加进去的skip-grant-tables 重启mysql服务4、使…

FPGA实现AD9708和AD9280波形收发输出HDMI模拟示波器,串口协议帧控制显示,提供工程源码和技术支持

目录1、AD9708芯片解读和电路设计2、AD9280芯片解读和电路设计3、FPGA设计框架4、AD9708波形生成并发送5、AD9280采集接收波形6、HDMI波形显示算法7、串口协议帧控制波形显示8、vivado工程9、上板调试验证10、福利&#xff1a;工程源码获取1、AD9708芯片解读和电路设计 AD9708…

85024A是德科技keysight高频探头

附加功能&#xff1a; 易于执行在线测量出色的频率响应和单位增益探头灵敏度高低失真度规格输入电容&#xff08;在 500 MHz 时&#xff09;&#xff1a;< 0.7pF&#xff08;标称值&#xff09;输入电阻&#xff1a;1 MΩ&#xff08;标称值&#xff09;带宽&#xff1a;30…

2月8日刷题总结

写题一点思路也没有&#xff0c;题解也不能看得很懂。所以系统性的学习DP ing……跟着进度来&#xff0c;因此刷了一些已经刷过的类型的题&#xff08;也算再次熟悉一下&#xff09;P1077 [NOIP2012 普及组] 摆花题目描述小明的花店新开张&#xff0c;为了吸引顾客&#xff0c;…

力扣SQL刷题5

目录597. 好友申请 I&#xff1a;总体通过率602. 好友申请 II &#xff1a;谁有最多的好友603. 连续空余座位1045. 买下所有产品的客户597. 好友申请 I&#xff1a;总体通过率 官方讲的题目太繁琐了&#xff0c;大概就是&#xff08;表2中列1列2不全相同的行数&#xff09;/&a…

测试开发之Vue学习笔记-Vue路由

Vue路由18. Vue-路由基础安装 cnpm install --save vue-router官方文档&#xff1a;https://router.vuejs.org/zh/src/main.js中&#xff08;1&#xff09;引入VueRouter&#xff1a;import VueRouter from "vue-router"&#xff08;2&#xff09;使用VueRouter&…

《知行合一王阳明》读书笔记

《知行合一王阳明》用通俗易懂的语言介绍了王阳明一生的传奇经历和他的心学的核心思想。这篇读后感主要介绍一下我对心学的理解。在我看来&#xff0c;心学最本质的要求是“致良知”&#xff0c;最核心的方法论是“知行合一”。致良知是说要遵从自己的本心。王阳明相信人性本善…

(蓝桥杯 刷题全集)【备战(蓝桥杯)算法竞赛-第1天(基础算法-上 专题)】( 从头开始重新做题,记录备战竞赛路上的每一道题 )距离蓝桥杯还有75天

&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6;&#x1f3c6; 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&a…

兔年新佳绩,思迈特软件获奖喜讯纷至沓来

近年来&#xff0c;随着大数据、云计算、人工智能、5G等技术加速创新&#xff0c;越来越多的ToB企业开始下沉探索边际&#xff0c;纵深业务服务场景&#xff0c;通过技术与行业的深度融合&#xff0c;为客户提供全面的转型服务&#xff0c;尽一切可能创造客户价值和商业价值。思…

【C++: list的模拟实现】

目录 1 list的简单回顾 2 类中成员变量的声明 3 __list_iterator 中运算符重载 4 list中的迭代器 5 list中增删查改以及clear 6 const迭代器 6.1 __list_iterator的重新实现 6.2 list类的巧妙修改 7 构造函数&&拷贝构造&&赋值运算符重载 8 反向迭代器…

金三银四丨黑蛋老师带你剖析-二进制漏洞

作者&#xff1a;黑蛋二进制漏洞岗上篇文章我们初步了解了一下简历投递方式以及二进制方向相关逆向岗位的要求&#xff0c;今天我们就来看看二进制漏洞相关的岗位&#xff0c;当然&#xff0c;漏洞岗位除了分不同平台&#xff0c;也有漏洞挖掘岗和漏洞分析利用岗。同样&#xf…

[人工智能-综述-11]:ChatGPT, 通用人工智能还是要来了

该来的还是要来的&#xff01;补充信息&#xff1a;ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型&#xff0c;一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话&#xff0c;还能根据聊天的上下文进行互动&…

C语言共用体(C语言union用法)详解

我们知道结构体&#xff08;Struct&#xff09;是一种构造类型或复杂类型&#xff0c;它可以包含多个类型不同的成员。在C语言中&#xff0c;还有另外一种和结构体非常类似的语法&#xff0c;叫做共用体&#xff08;Union&#xff09;&#xff0c;它的定义格式为&#xff1a;un…

STM32的HAL库分析及使用

STM32的HAL库分析及使用 STM32的三种开发方式 通常新手在入门STM32的时候&#xff0c;首先都要先选择一种要用的开发方式&#xff0c;不同的开发方式会导致你编程的架构是完全不一样的。一般大多数都会选用标准库和HAL库&#xff0c;而极少部分人会通过直接配置寄存器进行开发…

【Mysql第八期 子查询】

文章目录前言1. 需求分析与问题解决1.2 子查询的基本使用1.3 子查询的分类2. 单行子查询2.1 单行比较操作符2.2 代码示例2.5 子查询中的空值问题3. 多行子查询3.1 多行比较操作符3.2 代码示例3.3 空值问题4. 相关子查询4.2 代码示例4.3 EXISTS 与 NOT EXISTS关键字4.4 相关更新…

开发者社区「运营官」招募启动啦!

国内首个聚焦AI3D视觉技术的开发者社区「运营官」招募启动啦&#xff01; 想积累实习经验&#xff0c;却苦于找不到大厂机会&#xff1f; 想进入AI3D视觉行业&#xff0c;却苦于没有知音伯乐&#xff1f; 想积累更多工作经历&#xff0c;却苦于路程奔波、天各一方&#xff1f…

我们的微服务中为什么需要网关?

说起 Spring Cloud Gateway 的使用场景&#xff0c;我相信很多小伙伴都能够脱口而出认证二字&#xff0c;确实&#xff0c;在网关中完成认证操作&#xff0c;确实是 Gateway 的重要使用场景之一&#xff0c;然而并不是唯一的使用场景。在微服务中使用网关的好处可太多了&#x…

MODBUS TCP 转 PROFINET 网关从站快速配置手册

一、本案例是1500PLC通过微硬创新MODBUS TCP 转 PROFINET 网关连接组态王服务器从站快速配置&#xff0c;将 Modbus TCP 设备数据转接入到西门子 PROFINET 网络中 二、设备列表如下&#xff1a; 三、MODBUS TCP 转 PROFINET 网关从站快速配置方法步骤&#xff1a; 第1步&#x…

全网最详细的介绍ChatGPT:包括ChatGPT原理、应用、如何试用以及回答ChatGPT能否让程序员失业

文章目录1. 介绍ChatGPT2. ChatGPT示例3. 试用ChatGPT4. ChatGPT原理5. ChatGPT应用5.1 世界杯问题咨询5.2 写书信&#xff08;情书&#xff09;6. 总结1. 介绍ChatGPT 今天开车去上班的路上&#xff0c;听到电台介绍ChatGPT&#xff0c;此时百度的股价涨幅为25%&#xff0c;当…

谈谈Spring中Bean的生命周期?(让你瞬间通透~)

目录 1.Bean的生命周期 1.1、概括 1.2、图解 2、代码示例 2.1、初始化代码 2.2、初始化的前置方法和后置方法&#xff08;重写&#xff09; 2.3、Spring启动类 2.4、执行结果 2.5、经典面试问题 3.总结 1.Bean的生命周期 1.1、概括 Spring中Bean的生命周期就是Bean在…