久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx

JDK15的新特性有哪些

這篇文章將為大家詳細(xì)講解有關(guān)JDK15的新特性有哪些,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)公司專業(yè)成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì),集網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、網(wǎng)站制作于一體,網(wǎng)站seo、網(wǎng)站優(yōu)化、網(wǎng)站營銷、軟文營銷等專業(yè)人才根據(jù)搜索規(guī)律編程設(shè)計(jì),讓網(wǎng)站在運(yùn)行后,在搜索中有好的表現(xiàn),專業(yè)設(shè)計(jì)制作為您帶來效益的網(wǎng)站!讓網(wǎng)站建設(shè)為您創(chuàng)造效益。

JDK15的新特性

JEP 385 Deprecate RMI Activation for Removal

RMI Activation被標(biāo)記為Deprecate,將會(huì)在未來的版本中刪除。

RMI大家應(yīng)該都清楚,RMI就是Remote Method Invocation,翻譯成中文就是遠(yuǎn)程方法調(diào)用,是在JDK1.2中引入的。

RMI為java提供了開發(fā)分布式系統(tǒng)的強(qiáng)大能力。而J2EE的規(guī)范EJB就是使用RMI來實(shí)現(xiàn)的bean的遠(yuǎn)程調(diào)用的。

在RMI系統(tǒng)中,遠(yuǎn)程系統(tǒng)中存在很多分布式對(duì)象,如果這些分布式對(duì)象一直處于活動(dòng)狀態(tài)的話,將會(huì)占用很多寶貴的系統(tǒng)資源。

于是RMI引入了一種lazy Activation的方式,這種方式就叫做延遲激活。

這里有兩個(gè)概念,活動(dòng)對(duì)象和被動(dòng)對(duì)象。

活動(dòng)對(duì)象是在某些系統(tǒng)上的JVM中實(shí)例化并對(duì)外暴露的遠(yuǎn)程對(duì)象。被動(dòng)對(duì)象是尚未在JVM中實(shí)例化(或暴露)但可以進(jìn)入主動(dòng)狀態(tài)的對(duì)象。

將被動(dòng)對(duì)象轉(zhuǎn)換為主動(dòng)對(duì)象的過程稱為激活。激活要求對(duì)象與JVM關(guān)聯(lián),這可能會(huì)將該對(duì)象的類加載到JVM中,并且將該對(duì)象恢復(fù)為之前的狀態(tài)。

在RMI系統(tǒng)中,我們使用延遲激活。延遲激活將激活對(duì)象推遲到客戶第一次使用(即第一次方法調(diào)用)之前。

既然RMI Activation這么好用,為什么要廢棄呢?

因?yàn)閷?duì)于現(xiàn)代應(yīng)用程序來說,分布式系統(tǒng)大部分都是基于Web的,web服務(wù)器已經(jīng)解決了穿越防火墻,過濾請(qǐng)求,身份驗(yàn)證和安全性的問題,并且也提供了很多延遲加載的技術(shù)。

所以在現(xiàn)代應(yīng)用程序中,RMI Activation已經(jīng)很少被使用到了。并且在各種開源的代碼庫中,也基本上找不到RMI Activation的使用代碼了。

為了減少RMI Activation的維護(hù)成本,在JDK8中,RMI Activation被置為可選的。現(xiàn)在在JDK15中,終于可以廢棄了。

JEP 371 Hidden Classes

Hidden Classes是什么呢?

Hidden Classes就是不能直接被其他class的二凈值代碼使用的class。Hidden Classes主要被一些框架用來生成運(yùn)行時(shí)類,但是這些類不是被用來直接使用的,而是通過反射機(jī)制來調(diào)用。

通常來說基于JVM的很多語言都有動(dòng)態(tài)生成類的機(jī)制,這樣可以提高語言的靈活性和效率。

比如在JDK8中引入的lambda表達(dá)式,JVM并不會(huì)在編譯的時(shí)候?qū)ambda表達(dá)式轉(zhuǎn)換成為專門的類,而是在運(yùn)行時(shí)將相應(yīng)的字節(jié)碼動(dòng)態(tài)生成相應(yīng)的類對(duì)象。

另外使用動(dòng)態(tài)代理也可以為某些類生成新的動(dòng)態(tài)類。

那么我們希望這些動(dòng)態(tài)生成的類需要具有什么特性呢?

  1. 不可發(fā)現(xiàn)性。因?yàn)槲覀兪菫槟承╈o態(tài)的類動(dòng)態(tài)生成的動(dòng)態(tài)類,所以我們希望把這個(gè)動(dòng)態(tài)生成的類看做是靜態(tài)類的一部分。所以我們不希望除了該靜態(tài)類之外的其他機(jī)制發(fā)現(xiàn)。

  2. 訪問控制。我們希望在訪問控制靜態(tài)類的同時(shí),也能控制到動(dòng)態(tài)生成的類。

  3. 生命周期。動(dòng)態(tài)生成類的生命周期一般都比較短,我們并不需要將其保存和靜態(tài)類的生命周期一致。

但是現(xiàn)有的類的定義API ClassLoader::defineClass和Lookup::defineClass是不管類的字節(jié)碼是如何生成的,他們都是平等對(duì)待。

所以我們需要一些API來定義無法發(fā)現(xiàn)的且具有有限生命周期的隱藏類。這將提高所有基于JVM的語言實(shí)現(xiàn)的效率。

比如:

java.lang.reflect.Proxy可以定義隱藏類作為實(shí)現(xiàn)代理接口的代理類。

java.lang.invoke.StringConcatFactory可以生成隱藏類來保存常量連接方法;

java.lang.invoke.LambdaMetaFactory可以生成隱藏的nestmate類,以容納訪問封閉變量的lambda主體;

JavaScript引擎可以為從JavaScript程序轉(zhuǎn)換的字節(jié)碼生成隱藏的類,因?yàn)楫?dāng)引擎不再使用它們時(shí),這些類將被卸載。

普通類是通過調(diào)用ClassLoader::defineClass創(chuàng)建的,而隱藏類是通過調(diào)用Lookup::defineHiddenClass創(chuàng)建的。

這使JVM從提供的字節(jié)中派生一個(gè)隱藏類,鏈接該隱藏類,并返回提供對(duì)隱藏類的反射訪問的查找對(duì)象。

調(diào)用程序可以通過返回的查找對(duì)象來獲取隱藏類的Class對(duì)象。

JEP 339 Edwards-Curve Digital Signature Algorithm (EdDSA)

實(shí)現(xiàn)了EdDSA橢圓曲線簽名算法。

這里就不多講橢圓曲線簽名算法了,如果又想了解的朋友可以給我留言。

JEP 375 Pattern Matching for instanceof (Second Preview)

Pattern Matching 就是說可以在做pattern mathching的時(shí)候,直接對(duì)該對(duì)象進(jìn)行類型的轉(zhuǎn)換。

現(xiàn)在這個(gè)特性還是預(yù)覽版本的。

我們看一下具體的例子:

if (obj instanceof String) {
    String s = (String) obj;
    // use s
}

在Pattern Matching之前,我們使用instanceof之后,還需要對(duì)該對(duì)象進(jìn)行強(qiáng)制類型轉(zhuǎn)換才能使用。

但是在Pattern Matching之后,我們可以這樣用:

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

是不是很方便。

JEP 384 Records (Second Preview)

Record是一種輕量級(jí)的class,可以看做是數(shù)據(jù)結(jié)構(gòu)體。和scala中的case有點(diǎn)相似。

舉個(gè)自定義User的例子看一下Record是怎么用的:

public record Address(
        String addressName,
        String city
) {
}
public record CustUser(
        String firstName,
        String lastName,
        Address address,
        int age
) {}

上面我們定義了兩個(gè)類,CustUser和Address。CustUser中引用了Address。

Record和普通的類的區(qū)別就在于Record多了一個(gè)括號(hào)括起來的定義的字段。

Record類默認(rèn)是final的,里面的字段默認(rèn)是private final的。

要想知道Record到底是怎么工作的,我們可以使用javap來對(duì)編譯好的class文件反編譯,運(yùn)行javap CustUser,可以得到下面的結(jié)果:

警告: 二進(jìn)制文件CustUser包含com.flydean.records.CustUser
Compiled from "CustUser.java"
public final class com.flydean.records.CustUser extends java.lang.Record {
  public com.flydean.records.CustUser(java.lang.String, java.lang.String, com.flydean.records.Address, int);
  public java.lang.String toString();
  public final int hashCode();
  public final boolean equals(java.lang.Object);
  public java.lang.String firstName();
  public java.lang.String lastName();
  public com.flydean.records.Address address();
  public int age();
}

上面可以看到final class CustUser繼承自java.lang.Record。

并且自動(dòng)添加了默認(rèn)帶有所有字段的構(gòu)造函數(shù)。各個(gè)自動(dòng)的獲取方法,并實(shí)現(xiàn)了toString,hashCode和equals方法。

天啦,太完美了,我們想要的它居然都有。

如果上面的javap還不是很清楚的話,大家可以借助IDE的反編譯功能,打開CustUser.class文件看一看:

public final class CustUser extends java.lang.Record {
    private final java.lang.String firstName;
    private final java.lang.String lastName;
    private final com.flydean.records.Address address;
    private final int age;

    public CustUser(java.lang.String firstName, java.lang.String lastName, com.flydean.records.Address address, int age) { /* compiled code */ }

    public java.lang.String toString() { /* compiled code */ }

    public final int hashCode() { /* compiled code */ }

    public final boolean equals(java.lang.Object o) { /* compiled code */ }

    public java.lang.String firstName() { /* compiled code */ }

    public java.lang.String lastName() { /* compiled code */ }

    public com.flydean.records.Address address() { /* compiled code */ }

    public int age() { /* compiled code */ }
}

注意,上面的反編譯我們可以看到,record中的所有字段都是final的,只能在初始化的時(shí)候設(shè)置。并且方法里面也沒有提供其他可以改變字段內(nèi)容的方法。

所以我們得出了一個(gè)震世驚俗的結(jié)論:record是immutable的。

上面的例子中我們只使用了小括號(hào)里面的內(nèi)容,大括號(hào)還是空的呀。可不可以像其他正常的類一樣,添加點(diǎn)方法或者構(gòu)造函數(shù)進(jìn)去呢?

答案是肯定的。

先看一個(gè)整體的方案:

public record CustUserWithBody(
        String firstName,
        String lastName,
        Address address,
        int age
) {
    public String fullName(){
        return firstName+ lastName;
    }

    public CustUserWithBody{
        if (age < 18) {
            throw new IllegalArgumentException( "男大當(dāng)婚,女大當(dāng)嫁,18歲未到,不許出嫁!");
        }
    }
}

我們?cè)趓ecord的主題中,定義了一個(gè)方法和一個(gè)構(gòu)造函數(shù)。

先看這個(gè)方法,在方法中我們可以訪問到record中定義的變量,但是千萬不要嘗試去修改他們,因?yàn)樗麄兪莊inal的,你會(huì)得到一個(gè)變異錯(cuò)誤。

再看這個(gè)構(gòu)造函數(shù),這個(gè)構(gòu)造函數(shù)沒有小括號(hào),只有大括號(hào),這種構(gòu)造函數(shù)叫做Compact constructor。你無法在record中定義正常的構(gòu)造函數(shù),因?yàn)闀?huì)得到一個(gè)編譯錯(cuò)誤。

在這個(gè)Compact constructor中,我們可以對(duì)定義的字段進(jìn)行數(shù)據(jù)校驗(yàn)。如上所述。

JEP 360 Sealed Classes (Preview)

在Java中,類層次結(jié)構(gòu)通過繼承實(shí)現(xiàn)代碼的重用,父類的方法可以被許多子類繼承。

但是,類層次結(jié)構(gòu)的目的并不總是重用代碼。有時(shí),其目的是對(duì)域中存在的各種可能性進(jìn)行建模,例如圖形庫支持的形狀類型或金融應(yīng)用程序支持的貸款類型。

當(dāng)以這種方式使用類層次結(jié)構(gòu)時(shí),我們可能需要限制子類集從而來簡(jiǎn)化建模。

因?yàn)槲覀円肓藄ealed class或interfaces,這些class或者interfaces只允許被指定的類或者interface進(jìn)行擴(kuò)展和實(shí)現(xiàn)。

舉個(gè)例子:

package com.example.geometry;

public abstract sealed class Shape
    permits Circle, Rectangle, Square {...}

上面的例子中,我們指定了Shape只允許被Circle, Rectangle, Square來繼承。

上面的例子中并沒有指定類的包名,我們可以這樣寫:

package com.example.geometry;

public abstract sealed class Shape 
    permits com.example.polar.Circle,
            com.example.quad.Rectangle,
            com.example.quad.simple.Square {...}

JEP 378 Text Blocks

Text Blocks是為了解決在java中輸入多行數(shù)據(jù)的問題。

比如:

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

可以寫成:

String html = """
              <html>
                  <body>
                      <p>Hello, world</p>
                  </body>
              </html>
              """;
String query = "SELECT \"EMP_ID\", \"LAST_NAME\" FROM \"EMPLOYEE_TB\"\n" +
               "WHERE \"CITY\" = 'INDIANAPOLIS'\n" +
               "ORDER BY \"EMP_ID\", \"LAST_NAME\";\n";

可以寫成:

String query = """
               SELECT "EMP_ID", "LAST_NAME" FROM "EMPLOYEE_TB"
               WHERE "CITY" = 'INDIANAPOLIS'
               ORDER BY "EMP_ID", "LAST_NAME";

關(guān)于“JDK15的新特性有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

文章標(biāo)題:JDK15的新特性有哪些
網(wǎng)頁路徑:http://www.js-pz168.com/article22/jcijjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站App設(shè)計(jì)營銷型網(wǎng)站建設(shè)網(wǎng)站制作定制開發(fā)自適應(yīng)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)頁設(shè)計(jì)公司
久久99久久人婷婷精品综合_超碰aⅴ人人做人人爽欧美_亚洲电影第三页_日韩欧美一中文字暮专区_波多野结衣的一区二区三区_婷婷在线播放_人人视频精品_国产精品日韩精品欧美精品_亚洲免费黄色_欧美性猛交xxxxxxxx
久久99精品久久久| 国产精品18毛片一区二区| 丁香婷婷久久久综合精品国产| 欧美中日韩一区二区三区| 欧美日韩一区中文字幕| 国产亲近乱来精品视频 | 成人美女在线观看| 久久久久国产精品视频| 欧美午夜宅男影院| 国产欧美日韩卡一| 日韩av不卡一区二区| 99国产麻豆精品| 亚洲欧洲精品在线| www国产精品av| 亚洲成av人影院| 99这里都是精品| 亚洲制服中文| 久久精品人人做人人爽97| 午夜电影一区二区三区| av中文字幕一区| 在线国产精品网| 国产亚洲制服色| 免费看欧美女人艹b| 国产成人女人毛片视频在线| 欧美亚洲综合色| 国产精品麻豆一区二区| 韩国理伦片一区二区三区在线播放| 国产精选一区二区| 欧美精品一二三| 一级日本不卡的影视| 成人av在线资源网站| 先锋影音一区二区三区| 久久久久久久久久久黄色| 日本大胆欧美人术艺术动态 | 麻豆91免费观看| 久久国产精品高清| 日韩精品综合一本久道在线视频| 亚洲成人精品一区| 成人免费看片网站| 欧美久久久影院| 亚洲无人区一区| 99r国产精品视频| 欧美日韩一区二区不卡| 亚洲激情男女视频| 91丨porny丨蝌蚪视频| 欧美在线一区二区三区| 亚洲欧美视频一区| 99视频精品免费视频| 欧美性受xxxx| 亚洲一级二级三级| 不卡一区二区三区四区五区| 欧美福利视频一区| 天天影视网天天综合色在线播放| 成人在线视频电影| 欧美一区二区三区成人| 日韩高清不卡一区| 久久亚洲免费| 国产婷婷色一区二区三区| 国产一区二区三区四| 一区二区成人国产精品 | 麻豆精品一区二区av白丝在线 | 自拍偷拍国产精品| 99久久精品一区| 欧美美女激情18p| 天天操天天干天天综合网| 国产在线精品一区| 精品99一区二区三区| 韩国精品免费视频| 一区二区91美女张开腿让人桶| 亚洲欧洲国产日本综合| 91女神在线视频| 日韩精品一区二区三区在线| 精品一区二区免费在线观看| 亚洲砖区区免费| 亚洲综合一二区| 久久久av水蜜桃| 中文字幕+乱码+中文字幕一区| voyeur盗摄精品| 日韩一区二区三区观看| 精品一区二区久久| 日本道精品一区二区三区| 亚洲不卡一区二区三区| 欧美视频观看一区| 最近日韩中文字幕| 国产伦精品一区二区三区在线| 国产亚洲制服色| 99国产精品一区| 亚洲精品一线二线三线无人区| 国产白丝网站精品污在线入口| 欧美网站大全在线观看| 日本成人中文字幕在线视频| 日本精品一区| 亚洲精品日韩专区silk| 国产成人亚洲欧美| 久久久蜜臀国产一区二区| 国产精品亚洲人在线观看| 日韩久久久久久久| 亚洲色图在线播放| 粉嫩av一区二区三区免费观看 | 精品一区二区综合| 色综合色狠狠天天综合色| 亚洲国产成人av好男人在线观看| 久久婷婷开心| 一区二区三区色| 欧美一区二区三区四区五区六区 | 国产精品99久久久| 欧美日韩情趣电影| 老汉av免费一区二区三区| 中国一区二区三区| 秋霞国产午夜精品免费视频| 一级日韩一区在线观看| 亚洲国产wwwccc36天堂| 欧美日韩亚洲一区二区三区在线观看 | 国产精品国模大尺度私拍| 久久久精品综合| 91理论电影在线观看| 久久亚洲欧美国产精品乐播| 成人av在线一区二区| 精品免费国产二区三区| 成人动漫精品一区二区| 欧美大白屁股肥臀xxxxxx| 国产一区二区0| 欧美一区午夜视频在线观看| 国产成人午夜精品影院观看视频| 欧美亚洲一区二区在线| 麻豆精品新av中文字幕| 555www色欧美视频| 国产大陆a不卡| 日韩欧美一级二级三级久久久| 成人永久aaa| 久久一夜天堂av一区二区三区| av亚洲精华国产精华精华| 亚洲国产成人一区二区三区| 国产精品有限公司| 综合久久久久综合| 茄子视频成人在线观看 | 国产一区自拍视频| 夜夜操天天操亚洲| 亚洲资源在线网| 毛片av一区二区| 欧美乱妇20p| 成人av资源在线观看| 国产精品久久影院| 久久国产精品一区二区三区| 亚洲精品老司机| 中文视频一区视频二区视频三区| 奇米色一区二区| 欧美少妇bbb| 成人午夜电影小说| 国产喂奶挤奶一区二区三区| 久久av免费一区| 亚洲第一电影网| 欧美私模裸体表演在线观看| 成人毛片视频在线观看| 欧美极品少妇xxxxⅹ高跟鞋| 久久久综合亚洲91久久98| 亚洲国产欧美在线人成| 日本高清不卡aⅴ免费网站| 免费在线观看不卡| 欧美精品一区二区精品网| 国产伦精品一区二区三区高清版 | 久久综合九色综合久久久精品综合 | 免费人成在线不卡| 欧美一区二区三区免费在线看| 国产精品 日韩| 亚洲一区二区偷拍精品| 欧美在线不卡一区| 成人天堂资源www在线| 国产精品蜜臀av| 在线免费一区三区| 成人免费高清在线观看| 国产精品久久午夜夜伦鲁鲁| 五月天亚洲综合小说网| 免费黄网站欧美| 国产三级三级三级精品8ⅰ区| 日本一区二区三区免费观看 | 国产精品国产三级国产普通话三级| 欧美在线激情| 九九精品一区二区| 精品国产乱码久久久久久蜜臀| 久久99导航| 青青草视频一区| 欧美精品一区二区三区久久久| 免费不卡亚洲欧美| 久久se精品一区二区| 国产亚洲一区二区三区| 一本色道亚洲精品aⅴ| 成人h版在线观看| 夜夜精品浪潮av一区二区三区| 欧美另类高清zo欧美| 国产精品传媒毛片三区| 日韩av电影天堂| 欧美一区二区三区白人| 美脚丝袜一区二区三区在线观看| 久久精品免费看| 欧美激情中文字幕一区二区| 欧洲av一区二区嗯嗯嗯啊| 97人人澡人人爽| 蜜臀精品一区二区三区在线观看| 精品欧美乱码久久久久久1区2区|