溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JDK15新特性介紹

發(fā)布時(shí)間:2021-08-31 10:55:16 來源:億速云 閱讀:134 作者:chen 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“JDK15新特性介紹”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“JDK15新特性介紹”吧!

1、在CharSequence中添加了isEmpty默認(rèn)方法
    定義isEmpty用于測試字符序列是否為空的默認(rèn)方法,CharSequence::isEmpty可以用
作方法參考。實(shí)現(xiàn)的類java.lang.CharSequence和定義isEmpty方法的另一個(gè)接口應(yīng)注意
這一點(diǎn),因?yàn)榭赡苄枰獙?duì)其進(jìn)行修改以覆蓋isEmpty方法。

JDK15新特性介紹

2、支持Unicode 13.0
    此版本將Unicode支持升級(jí)到13.0,其中包括:java.lang.Character13.0水平,
這增加了13.0 5930個(gè)字符,總共143859個(gè)字符類支持Unicode字符數(shù)據(jù)庫。這些增加的內(nèi)容包括4個(gè)新腳本,總共154個(gè)腳本,
以及55個(gè)新表情符號(hào)字符。
3、TreeMap新方法

TreeMap重新實(shí)現(xiàn)壓倒性一切的如:putIfAbsent、computeIfAbsent、computeIfPresent、compute、merage

舉例說明putIfAbsent等價(jià)于如下:

default V putIfAbsent(K key, V value)
 V v = map.get(key);
 if (v == null){
     v = map.put(key, value);
 }
    
 return v;
4、文本塊(最終版)

優(yōu)勢:簡化了編寫Java程序的任務(wù),同時(shí)避免了常見情況下的轉(zhuǎn)義序列;增強(qiáng)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構(gòu)建的許多語言實(shí)現(xiàn)都依靠動(dòng)態(tài)類生成來提高靈活性和效率。

詳情可見--> JEP371

6、 GC回收期

淘汰-XXUseAdaptiveGDBoundary

7、改進(jìn)的序列化處理,IO
    使用java.io.ObjectInputStream.setObjectInputFilter方法設(shè)置序列化過濾器時(shí),必
須在從流中讀取任何對(duì)象之前調(diào)用它。如果調(diào)用readObject或方法readUnshared,則該
setObjectInputFilter方法將引發(fā)IllegalStateException。
8、優(yōu)化空子字符串處理,String.substring
在某些情況下,String.substring返回“”,但在子字符串長度為零時(shí),在所有情況下都可以進(jìn)行改進(jìn)。

之前邏輯是返回“”,需要增加一個(gè)新的地址,而目前為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類現(xiàn)在可以處理貨幣值的分組分隔符。例如,
在奧地利(de-AT語言環(huán)境)中使用的德語語言的貨幣分組分隔符為“?!?,而在其他德語語言環(huán)境
中的貨幣分組分隔符為“。”。
10、time用默認(rèn)值覆蓋本地化值
   java.time.format.DateTimeFormatter.localizedBy(Locale)方法現(xiàn)在采用默認(rèn)
的語言環(huán)境值,例如Chronology和/或DecimalStyle指定的語言環(huán)境參數(shù)。

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

jshell> DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL)
    .localizedBy(Locale.forLanguageTag("fa"))
    .format(LocalDate.now())
$3 ==> "???? 1 ??? 2020"

數(shù)字是阿拉伯文(西文)數(shù)字,在JDK 15中:

jshell> DateTimeFormatter.ofLocalizedDate(FormatStyle.FULL)
    .localizedBy(Locale.forLanguageTag("fa"))
    .format(LocalDate.now())
$3 ==> "???? ? ??? ????"

這些數(shù)字使用擴(kuò)展阿拉伯語-印度數(shù)字,因?yàn)樗遣ㄋ拐Z區(qū)域設(shè)置的默認(rèn)編號(hào)系統(tǒng)。

11、time ValueRange.of
     ValueRange.of(long min,long maxSmallest,long maxLargest),如果
最小值大于最小最大值,則將引發(fā)異常。但是,僅當(dāng)最小值大于最大最大值時(shí)才會(huì)發(fā)生例外。
12、性能改進(jìn)InflaterOutputStream.write
    1、InflaterOutputStream(OutputStream out, Inflater infl, int bufLen)允
許指定要使用的解壓縮器和緩沖區(qū)大小。
    2、InflaterOutputStream.write(byte[] b, int off, int len)
正在使用最大512字節(jié)的緩沖區(qū)大小寫入數(shù)據(jù)。
    3、從JDK 15開始,通過InflaterOutputStream(OutputStream out, Inflater 
infl,int bufLen)所指定的緩沖區(qū)大小將在對(duì)的調(diào)用中使用InflaterOutputStream.write(
byte[] b,int off, int len)。如果在調(diào)用InflaterOutputStream 構(gòu)造函數(shù)時(shí)未指定緩沖
區(qū)大小,則默認(rèn)為512字節(jié)。
13、集合性能提升(Better Listing of Arrays)
    復(fù)制集合的首選方法是使用“復(fù)制構(gòu)造函數(shù)”。例如,要將集合復(fù)制到新的ArrayList中,
可以編寫new ArrayList<>(collection)。在某些情況下,可能會(huì)制作其他臨時(shí)副本,如
果要復(fù)制的集合非常大,則應(yīng)用程序應(yīng)(意識(shí)到/監(jiān)視)制作副本所需的大量資源。
14、GC:G1優(yōu)化

針對(duì)G1堆區(qū)域大小的改進(jìn)

    默認(rèn)的堆區(qū)域大小計(jì)算已更改為默認(rèn)情況下返回較大的區(qū)域。計(jì)算仍以2048個(gè)區(qū)域?yàn)槟繕?biāo),
但是兩個(gè)方面發(fā)生了變化,這些更改提高了啟動(dòng)和運(yùn)行時(shí)性能
    1、僅考慮最大堆大小。舊的計(jì)算還考慮了初始堆大小,但是當(dāng)未設(shè)置堆大小時(shí),這可能會(huì)
產(chǎn)生意外的行為。
    2、區(qū)域大小四舍五入到最接近的2的冪,而不是減小。在最大堆大小不是2的冪的情況下,
這將返回更大的區(qū)域大小。
15、ZGC一種可擴(kuò)展低延遲垃圾收集器
    Z垃圾收集器(ZGC)現(xiàn)在可以在生產(chǎn)中使用,不再標(biāo)記為實(shí)驗(yàn)功能。通過使用-XX:+UseZGC命
令行選項(xiàng)啟用ZGC
16、模式匹配的instanceof(第二預(yù)覽版)

提供模式匹配來 增強(qiáng)Java編程語言instanceof

if (obj instanceof String s) { 
    // can use s here     } else {     // can't use s here }
17、Record(第二預(yù)覽版)
@Data@AllArgsConstructorclass Group {// 組名    private String name;// 人數(shù)    private int nums;
}

使用它可以替代構(gòu)造器、equal方法、toString方法,hashCode方法

Point(String name,int nums){}

    Java語言中一種新型的類型聲明。像枚舉一樣enum, record是類的受限形式。聲明其表示形式,并提交與該表示形式匹配的API。記錄放棄了類通常享有的自由:將API與表示分離的能力。作為回報(bào),記錄獲得了很大程度的簡潔性。

到此,相信大家對(duì)“JDK15新特性介紹”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI