JDK15新特性详解

Wesley13
• 阅读 676

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

      JDK14新特性详解,2020-03-17正式发布

   JDK13新特性详解,2019-09-17正式发布

JDK12新特性详解,2019-03-19正式发布

JDK11新特性详解,2018-09-25正式发布

JDK10新特性详解,2018-03-20正式发布

JDK9 新特性详解,2017-09-21正式发布

JDK8 新特性详解,2014-03-18正式发布

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

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

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

JDK15新特性详解

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

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

JDK15新特性详解

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编程语言。密封的类和接口限制可以扩展或实现它们的其他类或接口。

详细参考--》起因

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593
Wesley13 Wesley13
3年前
JDK15真的来了,一起来看看它的新特性
简介一年两次的JDK最新版本JDK15在2020年9月15日正式发布了,这次的JDK15给我们带了隐藏类,EdDSA,模式匹配,Records,封闭类和TextBlock等诸多新特性。一起来看看吧。JDK15的新特性JEP385DeprecateRMIActivationforRemoval
Wesley13 Wesley13
3年前
Java程序员必备基础:JDK 5
前言JDK15发布啦~我们一起回顾JDK515的新特性吧,大家一起学习哈~本文已经收录到github❝https://github.com/whx123/JavaHome❞「公众号:捡田螺的小男孩」Java5新特性!(https://oscimg.oschina.n
Wesley13 Wesley13
3年前
JDK14新特性详解
JDK15新特性详解,20200915(https://my.oschina.net/mdxlcj/blog/3107021)正式发布(https://my.oschina.net/mdxlcj/blog/4586284)(https://my.oschina.net/mdxlcj/blog/3107021)    JDK1
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
Stella981 Stella981
3年前
From表单提交的几种方式
<body<formaction"https://my.oschina.net/u/3285916"method"get"name"formOne"id"formId"name:<inputtype"text"name"name"pwd:<inputtyp
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Easter79 Easter79
3年前
Springboot2.0.X + mongodb多数据源(账号密码)(77)
        之前在崛起于Springboot2.XMongodb多数据源(35)(https://my.oschina.net/mdxlcj/blog/1928794),结果发现没有用户名和密码,替换之后不管用,然后重新写一个带用户名和密码的多数据源,方便企业级使用,目前适用于2.0.X版本,高版本的话,里面的配置Factory会过期,所以等有