JDK15新特性介绍

本篇内容主要讲解“JDK15新特性介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JDK15新特性介绍”吧!

成都创新互联公司是一家专业提供达孜企业网站建设,专注与网站设计制作、成都网站建设、HTML5、小程序制作等业务。10年已为达孜众多企业、政府机构等服务。创新互联专业网络公司优惠进行中。

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 = """   

Hello, world

   """;
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@AllArgsConstructorclass Group {// 组名    private String name;// 人数    private int nums;
}

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

Point(String name,int nums){}

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

到此,相信大家对“JDK15新特性介绍”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


网站名称:JDK15新特性介绍
当前地址:http://cdiso.cn/article/ggpdep.html

其他资讯