最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java15新功能的詳細(xì)講解

 更新時(shí)間:2021年08月19日 10:43:49   作者:程序猿阿朗  
這篇文章主要介紹了java15的新功能,雖然java15并不是長(zhǎng)期支持的版本,但是很多新功能還是很有用的。感興趣的小伙伴可以參考一下

Java 15 在 2020 年 9 月發(fā)布,雖然不是長(zhǎng)久支持版本,但是也帶來(lái)了 14 個(gè)新功能,這些新功能中有不少是十分實(shí)用的。

Java 15 官方下載:https://jdk.java.net/archive/

Java 15 官方文檔:https://openjdk.java.net/projects/jdk/15/

Java 15 新功能:

JEP 描述
JEP 339 愛(ài)德華曲線算法(EdDSA)
JEP 360 Sealed Classes(密封類(lèi))預(yù)覽
JEP 371 Hidden Classes(隱藏類(lèi))
JEP 372 移除 Nashorn JavaScript 引擎
JEP 373 重新實(shí)現(xiàn) DatagramSocket APII
JEP 374 禁用和廢棄偏向鎖(Biased Locking)
JEP 375 instanceof 類(lèi)型匹配 (二次預(yù)覽)
JEP 377 ZGC: 可擴(kuò)展低延遲垃圾收集器(正式發(fā)布)
JEP 378 文本塊
JEP 379 Shenandoah: 低停頓時(shí)間的垃圾收集器
JEP 381 刪除 Solaris 和 SPARC 端口
JEP 383 外部?jī)?nèi)存訪問(wèn) API(第二個(gè)孵化器))
JEP 384 Records (二次預(yù)覽)
JEP 385 廢棄 RMI 激活機(jī)制

1. JEP 339 愛(ài)德華曲線算法(EdDSA)

Java 15 中增加了一個(gè)新的密碼學(xué)算法,愛(ài)德華曲線算法(EdDSA)簽名算法。它是由 Schnorr 算法發(fā)展而來(lái),在 RFC8032 中被定義實(shí)現(xiàn)。

package com.wdbyte;

import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.Signature;
import java.security.SignatureException;
import java.util.Base64;

public class JEP339 {

    public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException, SignatureException {
        KeyPairGenerator kpg = KeyPairGenerator.getInstance("Ed25519");
        KeyPair kp = kpg.generateKeyPair();
        byte[] msg = "www.wdbyte.com".getBytes(StandardCharsets.UTF_8);
        Signature sig = Signature.getInstance("Ed25519");
        sig.initSign(kp.getPrivate());
        sig.update(msg);
        byte[] s = sig.sign();
        System.out.println(Base64.getEncoder().encodeToString(s));
    }
}

輸出結(jié)果:

VXlpxapU+LSWjVQ0QNJvdpUh6VI6PjSwOQ2pHu65bCfnLR13OyWKunlc9rc+7SMxCh2Mnqf7TmC/iOG8oimbAw==

2. JEP 360:Sealed Classes(密封類(lèi))預(yù)覽

我們都知道,在 Java 中如果想讓一個(gè)類(lèi)不能被繼承和修改,這時(shí)我們應(yīng)該使用 final 關(guān)鍵字對(duì)類(lèi)進(jìn)行修飾。不過(guò)這種要么可以繼承,要么不能繼承的機(jī)制不夠靈活,有些時(shí)候我們可能想讓某個(gè)類(lèi)可以被某些類(lèi)型繼承,但是又不能隨意繼承,是做不到的。Java 15 嘗試解決這個(gè)問(wèn)題,引入了 sealed 類(lèi),被 sealed 修飾的類(lèi)可以指定子類(lèi)。這樣這個(gè)類(lèi)就只能被指定的類(lèi)繼承。

而且 sealed 修飾的類(lèi)的機(jī)制具有傳遞性,它的子類(lèi)必須使用指定的關(guān)鍵字進(jìn)行修飾,且只能是 final 、sealed 、non-sealed 三者之一。

示例:犬類(lèi)(Dog)只能被牧羊犬(Collie)和田園犬(TuGou)繼承,使用 sealed 關(guān)鍵字。

package com.wdbyte;

public  sealed interface Dog permits Collie, TuGou {
    //...
}

牧羊犬(Collie)只能被邊境牧羊犬(BorderCollie)繼承。

package com.wdbyte;

/**
 * 牧羊犬
 * @author www.wdbyte.com
 */
public sealed class Collie implements Dog permits BorderCollie {

}

邊境牧羊犬(BorderCollie)不能被繼承,使用 final 關(guān)鍵字。

package com.wdbyte;

/**
 *
 * @author www.wdbyte.com
 */
public final class BorderCollie extends Collie{
}

田園犬(ToGou)可以被任意繼承,使用 non-sealed 關(guān)鍵字。

package com.wdbyte;

/**
 * @author niulang
 */
public non-sealed class TuGou implements Dog {
}

3. JEP 371:Hidden Classes(隱藏類(lèi))

這個(gè)特性讓開(kāi)發(fā)者可以引入一個(gè)無(wú)法被其他地方發(fā)現(xiàn)使用,且類(lèi)的生命周期有限的類(lèi)。這對(duì)運(yùn)行時(shí)動(dòng)態(tài)生成類(lèi)的使用方式十分有利,可以減少內(nèi)存占用,下面是一個(gè)使用示例。

package com.wdbyte;

public class JEP371Test {
    public static String lookup() {
      return "www.wdbyte.com";
    }
}

把類(lèi) JEP371Test 編譯后的 Class 轉(zhuǎn)換成 Base64,然后使用 Java 15 新特性加載調(diào)用類(lèi)中的 lookup 方法。

package com.wdbyte;

import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.util.Base64;

/**
 * @author www.wdbyte.com
 */
public class JEP371 {

    private static String CLASS_INFO = "yv66vgAAADQAFAoAAgADBwAEDAAFAAYBABBqYXZhL2xhbmcvT2JqZWN0AQAGPGluaXQ+AQADKClWCAAIAQAOd3d3LndkYnl0ZS5jb20HAAoBABVjb20vd2RieXRlL0pFUDM3MVRlc3QBAARDb2RlAQAPTGluZU51bWJlclRhYmxlAQASTG9jYWxWYXJpYWJsZVRhYmxlAQAEdGhpcwEAF0xjb20vd2RieXRlL0pFUDM3MVRlc3Q7AQAGbG9va3VwAQAUKClMamF2YS9sYW5nL1N0cmluZzsBAApTb3VyY2VGaWxlAQAPSkVQMzcxVGVzdC5qYXZhACEACQACAAAAAAACAAEABQAGAAEACwAAAC8AAQABAAAABSq3AAGxAAAAAgAMAAAABgABAAAAAwANAAAADAABAAAABQAOAA8AAAAJABAAEQABAAsAAAAbAAEAAAAAAAMSB7AAAAABAAwAAAAGAAEAAAAEAAEAEgAAAAIAEw==";

    public static void main(String[] args) throws Throwable {
        byte[] classInBytes = Base64.getDecoder().decode(CLASS_INFO);
        Class<?> proxy = MethodHandles.lookup()
            .defineHiddenClass(classInBytes, true, MethodHandles.Lookup.ClassOption.NESTMATE)
            .lookupClass();

        System.out.println(proxy.getName());
        MethodHandle mh = MethodHandles.lookup().findStatic(proxy, "lookup", MethodType.methodType(String.class));
        String result = (String) mh.invokeExact();
        System.out.println(result);
    }
}

輸出結(jié)果:

com.wdbyte.JEP371Test/0x0000000800c01800
www.wdbyte.com

4. JEP 372:移除 Nashorn JavaScript 引擎

Nashorn JavaScript 引擎在 Java 8 中被引入,在 Java 11 中被標(biāo)記為廢棄。由于 ECMAScript 語(yǔ)言發(fā)展很快,維護(hù) Nashorn JavaScript 的成本過(guò)于高昂,在 Java 15 中被徹底刪除。

擴(kuò)展閱讀:Nashorn JavaScript EngineDeprecate the Nashorn JavaScript Engine

5. JEP 373:重新實(shí)現(xiàn) DatagramSocket API

Java 13 中重新實(shí)現(xiàn)了舊的 Socket API,在介紹 Java 13 時(shí)還有一部分做了這方面的介紹。

現(xiàn)在,Java 15 重新實(shí)現(xiàn)了遺留的 DatagramSocket。

擴(kuò)展閱讀:Java 13 新功能介紹

6. JEP 374:禁用和廢棄偏向鎖(Biased Locking)

在之前,JVM 在處理同步操作,如使用 synchronized 同步時(shí),有一套鎖的升級(jí)機(jī)制,其中有一個(gè)鎖機(jī)制就是偏向鎖。然而通過(guò)目前的 Java 開(kāi)發(fā)環(huán)境來(lái)看,使用這些被 synchronized 同步的類(lèi)的機(jī)會(huì)并不多,如開(kāi)發(fā)者更喜歡使用 HashMap 或者 ArrayList 而非 HashTable 和 Vector。

即使換個(gè)角度,當(dāng)初使用偏向鎖是為了提高性能,如今看來(lái)性能提升的程度和使用次數(shù)都不太有用。而偏向鎖的引入增加了 JVM 的復(fù)雜性。

所以現(xiàn)在偏向鎖被默認(rèn)禁用,在不久的將來(lái)將會(huì)徹底刪除,對(duì)于 Java 15,我們?nèi)匀豢梢允褂?XX:+UseBiasedLocking 啟用偏向鎖定,但它會(huì)提示 這是一個(gè)已棄用的 API。

7. JEP 375:instanceof 類(lèi)型匹配 (二次預(yù)覽)

instanceof 類(lèi)型匹配在 Java 14 中已經(jīng)改進(jìn),這次僅僅再次預(yù)覽,沒(méi)有任何改動(dòng),用于接受更多的使用反饋。這個(gè)特性在 Java 16 中成為正式特性。

在之前,使用 instanceof 進(jìn)行類(lèi)型判斷之后,需要進(jìn)行對(duì)象類(lèi)型轉(zhuǎn)換后才能使用。

package com.wdbyte;

import java.util.ArrayList;
import java.util.List;

public class Java14BeaforInstanceof {

    public static void main(String[] args) {
        Object obj = new ArrayList<>();
        if (obj instanceof ArrayList) {
            ArrayList list = (ArrayList)obj;
            list.add("www.wdbyte.com");
        }
        System.out.println(obj);
    }
}

而在 Java 14 中,可以在判斷類(lèi)型時(shí)指定變量名稱進(jìn)行類(lèi)型轉(zhuǎn)換,方便了使用。

package com.wdbyte;

import java.util.ArrayList;

public class Java14Instanceof {
    public static void main(String[] args) {
        Object obj = new ArrayList<>();
        if (obj instanceof ArrayList list) {
            list.add("www.wdbyte.com");
        }
        System.out.println(obj);
    }
}

可以看到,在使用 instanceof 判斷類(lèi)型成立后,會(huì)自動(dòng)強(qiáng)制轉(zhuǎn)換類(lèi)型為指定類(lèi)型。

輸出結(jié)果:

[www.wdbyte.com]

擴(kuò)展閱讀:Java 14 新功能介紹

8. JEP 377:ZGC: 可擴(kuò)展低延遲垃圾收集器(正式發(fā)布)

ZGC 垃圾收集器在 Java 11 中被引入,但是因?yàn)槭占鞯膹?fù)雜性,當(dāng)初決定逐漸引入。然后不斷的聽(tīng)取用戶的反饋建議修復(fù)問(wèn)題。而現(xiàn)在,已經(jīng)很久沒(méi)有收到用戶的問(wèn)題反饋了,ZGC 是時(shí)候投入正式使用階段了。所以在 Java 15 中 ZGC 正式發(fā)布,可以使用下面的參數(shù)啟用 ZGC。

$ java -XX:+UseZGC className

9. JEP 378: 文本塊

文本塊在 Java 12 JEP 326 原始字符串文字 中引入,在 Java 13 JEP 355:文本塊(預(yù)覽) 中開(kāi)始預(yù)覽,在 Java 14 JEP 368:文本塊(第二次預(yù)覽),而現(xiàn)在,在 Java 15 ,文本塊是正式的功能特性了。

String content = """
        {
            "upperSummary": null,\
            "sensitiveTypeList": null,
            "gmtModified": "2011-08-05\s10:50:09",
        }
         """;
System.out.println(content);

擴(kuò)展閱讀:Java 14 新功能介紹- JEP368 文本塊

10. JEP 379:Shenandoah: 低停頓時(shí)間的垃圾收集器

Shenandoah 垃圾收集器在 Java 12 中開(kāi)始引入,Java 15 中成為了正式功能的一部分,可以使用下面的參數(shù)啟用 Shenandoah 垃圾收集器。

java -XX:+UseShenandoahGC

但是 openJDK 15 中默認(rèn)是沒(méi)有 Shenandoah 收集器,想要使用此功能可以下載 AdoptOpenJDK。

為什么 openJDK 中沒(méi)有 Shenandoah 垃圾收集器?

Shenandoah 是一個(gè)高性能、低暫停時(shí)間的垃圾收集器,它是 Red Hat 主導(dǎo)的項(xiàng)目。當(dāng) Red Hat 第一次提議將 Shenandoah 貢獻(xiàn)給 OpenJDK 時(shí),Oracle 明確表示不想支持它,OpenJDK 作為一個(gè)免費(fèi)軟件,不想支持 Red Hat 的 Shenandoah 完全沒(méi)有問(wèn)題。

最后 Red Hat 選擇和 Oracle 合作設(shè)計(jì)一個(gè)真正干凈的可插拔垃圾收集器接口,允許任何人輕松選擇垃圾收集器以包含在他們的構(gòu)建中。最終 Shenandoah 進(jìn)入了 JDK 12,但是沒(méi)有構(gòu)建進(jìn) OpenJDK。

11. JEP 384:Records(二次預(yù)覽)

在 Java 14 中引入了 Record 類(lèi),Java 15 中對(duì) Record 進(jìn)行了增強(qiáng)。使它可以支持密封類(lèi)型、Record 注解以及相關(guān)的反射 API 等。

示例:Record 支持密封(sealed)類(lèi)型。

package com.wdbyte;

/**
 * @author www.wdbyte.com
 */
public sealed interface DataBase permits DataBaseSelect, DataBaseUpdate {
}

final record DataBaseSelect(@Deprecated String table, String sql) implements DataBase {
}

final record DataBaseUpdate() implements DataBase {
}

在 java.lang.Class 增加了兩個(gè)公共方法用于獲取 Record 類(lèi)信息:

  1. RecordComponent[] getRecordComponents()
  2. boolean isRecord()

其他更新

JEP 381:刪除 Solaris 和 SPARC 端口

Java 14 JEP 362棄用了 Solaris/SPARC、Solaris/x64 和 Linux/SPARC 端口,現(xiàn)在它在 Java 15 中被正式刪除。

JEP 383:外部?jī)?nèi)存訪問(wèn) API(第二個(gè)孵化器)

JEP 385:廢棄 RMI 激活機(jī)制

只是廢棄 RMI 激活機(jī)制,不影響 RMI 其他功能。

參考

https://openjdk.java.net/projects/jdk/15/

https://docs.oracle.com/en/java/javase/14/docs/specs/rmi/activation.html

https://mkyong.com/java/what-is-new-in-java-15/

到此這篇關(guān)于java15新功能的詳細(xì)講解的文章就介紹到這了,更多相關(guān)java15新功能介紹內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java壓縮文件工具類(lèi)ZipUtil使用方法代碼示例

    Java壓縮文件工具類(lèi)ZipUtil使用方法代碼示例

    這篇文章主要介紹了Java壓縮文件工具類(lèi)ZipUtil使用方法代碼示例,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-11-11
  • Java 代理(Proxy)的原理及應(yīng)用

    Java 代理(Proxy)的原理及應(yīng)用

    動(dòng)態(tài)代理技術(shù)就是用來(lái)產(chǎn)生一個(gè)對(duì)象的代理對(duì)象的。 我們?cè)陂_(kāi)發(fā)中之所以要產(chǎn)生一個(gè)對(duì)象的代理對(duì)象,主要用于攔截對(duì)真實(shí)業(yè)務(wù)對(duì)象的訪問(wèn)。本文主要介紹了Java 代理的使用,感興趣的可以了解一下
    2021-05-05
  • Spring MVC url提交參數(shù)和獲取參數(shù)

    Spring MVC url提交參數(shù)和獲取參數(shù)

    本文重要講述通過(guò)url提交參數(shù)和獲取參數(shù)的具體操作與實(shí)現(xiàn)。具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-04-04
  • 解決Maven本地倉(cāng)庫(kù)明明有對(duì)應(yīng)的jar包但還是報(bào)找不到的問(wèn)題

    解決Maven本地倉(cāng)庫(kù)明明有對(duì)應(yīng)的jar包但還是報(bào)找不到的問(wèn)題

    這篇文章主要介紹了解決Maven本地倉(cāng)庫(kù)明明有對(duì)應(yīng)的jar包但還是報(bào)找不到的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Java實(shí)現(xiàn)猜數(shù)字小游戲代碼

    Java實(shí)現(xiàn)猜數(shù)字小游戲代碼

    大家好,本篇文章主要講的是Java實(shí)現(xiàn)猜數(shù)字小游戲代碼,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • Mybatis-plus批量去重插入ON DUPLICATE key update使用方式

    Mybatis-plus批量去重插入ON DUPLICATE key update使用方式

    這篇文章主要介紹了Mybatis-plus批量去重插入ON DUPLICATE key update使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Maven配置文件settings.xml的實(shí)現(xiàn)

    Maven配置文件settings.xml的實(shí)現(xiàn)

    Maven是一個(gè)用于構(gòu)建和管理Java項(xiàng)目的強(qiáng)大工具,它依賴于設(shè)置文件來(lái)配置和管理其行為,其中最重要的之一便是settings.xml文件,本文主要介紹了Maven配置文件settings.xml的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • SpringBoot使用責(zé)任鏈模式優(yōu)化業(yè)務(wù)邏輯中的if-else代碼

    SpringBoot使用責(zé)任鏈模式優(yōu)化業(yè)務(wù)邏輯中的if-else代碼

    在開(kāi)發(fā)過(guò)程中,我們經(jīng)常會(huì)遇到需要根據(jù)不同的條件執(zhí)行不同的邏輯的情況,我們可以考慮使用責(zé)任鏈模式來(lái)優(yōu)化代碼結(jié)構(gòu),使得代碼更加清晰、可擴(kuò)展和易于維護(hù)
    2023-06-06
  • 深入探討Java超時(shí)自動(dòng)取消的實(shí)現(xiàn)方案

    深入探討Java超時(shí)自動(dòng)取消的實(shí)現(xiàn)方案

    在復(fù)雜的分布式系統(tǒng)中,超時(shí)控制是保障系統(tǒng)穩(wěn)定性和可用性的關(guān)鍵機(jī)制,本文將深入探討Java中實(shí)現(xiàn)超時(shí)自動(dòng)取消的多種方案,希望對(duì)大家有所幫助
    2024-11-11
  • 使用Aop的方式實(shí)現(xiàn)自動(dòng)日志記錄的方式詳細(xì)介紹

    使用Aop的方式實(shí)現(xiàn)自動(dòng)日志記錄的方式詳細(xì)介紹

    這篇文章主要介紹了使用Aop的方式實(shí)現(xiàn)自動(dòng)日志記錄,通過(guò)監(jiān)聽(tīng)器去監(jiān)聽(tīng),當(dāng)訪問(wèn)到具體的類(lèi)方法,通過(guò)aop切面去獲取訪問(wèn)的方法,然后將日志記錄下來(lái),就這種方式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04

最新評(píng)論

洪洞县| 玛多县| 乌海市| 治多县| 远安县| 松阳县| 彰化市| 普格县| 榆社县| 自贡市| 白银市| 峡江县| 慈利县| 东乡族自治县| 巴南区| 定安县| 云浮市| 兴隆县| 邵武市| 宾川县| 康乐县| 长泰县| 青铜峡市| 枝江市| 汝城县| 迁西县| 彝良县| 资阳市| 五大连池市| 云浮市| 永泰县| 修武县| 思南县| 含山县| 襄汾县| 邵阳市| 彝良县| 和田市| 拉孜县| 涞水县| 阳东县|