這篇文章給大家分享的是有關(guān)Java11有哪些新特性的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
創(chuàng)新互聯(lián)專注于建德企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站建設(shè),商城網(wǎng)站建設(shè)。建德網(wǎng)站建設(shè)公司,為建德等地區(qū)提供建站服務(wù)。全流程按需搭建網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
1.Lambda表達(dá)式: (參數(shù)) -> {主體}
Lambda表達(dá)式打開(kāi)了函數(shù)式編程愛(ài)好者繼續(xù)使用Java的大門(mén)。Lambda表達(dá)式需要零個(gè)或多個(gè)參數(shù),這些參數(shù)可以在表達(dá)式主體中訪問(wèn),并隨計(jì)算結(jié)果一起返回。Comparator<Integer> comparator = (a, b) -> a-b;
System.out.println(comparator.compare(3, 4)); // -1
2. 函數(shù)接口:只有一種方法的接口
lambda表達(dá)式本身被視為可以分配給函數(shù)接口的功能接口,如上所示。Java 8還提供了如下所示的新功能構(gòu)造:
BiFunction<Integer, Integer, Integer> comparator = (a, b) -> a-b;
System.out.println(comparator.apply(3, 4)); // -1
有關(guān)更多功能結(jié)構(gòu),請(qǐng)參閱java.util.function包,其擁有:Function,Supplier,Consumer,Predicate等。還可以使用下面注解來(lái)定義函數(shù)接口:
@FunctionalInterface
接口還可以具有方法的一個(gè)或多個(gè)默認(rèn)實(shí)現(xiàn),并且仍然可以保持為函數(shù)接口。它有助于避免不必要的抽象基類的默認(rèn)實(shí)現(xiàn)。
可以使用::操作符訪問(wèn)靜態(tài)和實(shí)例方法,并且可以使用 ::new訪問(wèn)構(gòu)造函數(shù),并且可以將它們作為函數(shù)參數(shù)傳遞,例如System.out::println .
3.流:不僅僅是迭代
流是一系列對(duì)象和操作。 接口中添加了許多默認(rèn)方法,以支持流的forEach, filter, map和reduce構(gòu)造。提供集合的Java庫(kù)現(xiàn)在支持流。 例如 BufferredReader.lines()。 所有集合都可以輕松轉(zhuǎn)換為流。 還支持并行流操作,它在內(nèi)部分配到多個(gè)CPU上的操作。
1)中間操作:懶惰性操作
對(duì)中間操作的懶惰執(zhí)行時(shí),在調(diào)用終止操作之前不會(huì)發(fā)生任何事情。
map(mapping):每個(gè)元素是一對(duì)一的,并轉(zhuǎn)換為另一種形式。
filter(predicate):給定謂詞為true的過(guò)濾元素。
peek(),limit()和sorted()是其他中間操作。
2)終止操作:結(jié)果化操作
forEach(consumer):遍歷每個(gè)元素并消費(fèi)該元素
reduce(initialValue,accumulator):它以initialValue開(kāi)頭,并在每個(gè)元素上迭代,并以最終返回的值來(lái)保持值更新。
collect(collector):這是一個(gè)懶惰的評(píng)估結(jié)果,需要使用收集器收集,例如java.util.stream.Collectors,包括toList(),join(),summarizingX(),averagingX(),groupBy(), 和partitionBy()。
4. Optional:消除Null編程
基于Null的編程被認(rèn)為是糟糕的,但幾乎沒(méi)有任何選擇可以提前避免它。我們現(xiàn)在可以在Optional對(duì)象中測(cè)試isPresent(),而不是測(cè)試null。 讀取它(流也有多個(gè)構(gòu)造和操作)返回Optional對(duì)象。
5. JVM變化:PermGen已退役
PermGen已被完全刪除并被MetaSpace取代。 元空間(Metaspace)不再是堆內(nèi)存的一部分,而是分配給進(jìn)程的本機(jī)內(nèi)存的一部分。 JVM調(diào)優(yōu)現(xiàn)在需要不同的方面,因?yàn)楸O(jiān)控是必需的,不僅對(duì)于堆,而且也包括對(duì)本機(jī)內(nèi)存。
某些GC的組合已棄用。 GC根據(jù)環(huán)境配置自動(dòng)分配。
還有其它的變化,包括NIO、DateTime、Security、簡(jiǎn)潔的JDK配置文件以及jDeps,jjs,JavaScript Engine工具等。
6.Java 9:延續(xù)上一版慣例
Java 9已經(jīng)存在了一年多了,繼續(xù)保持8的傳統(tǒng)。 但它的關(guān)鍵特征模塊系統(tǒng)仍然沒(méi)有很好地被采用。 在我看來(lái),在主流中真正采用這些功能還需要更多時(shí)間。 它以設(shè)計(jì)類的方式挑戰(zhàn)開(kāi)發(fā)人員。 他們現(xiàn)在需要在應(yīng)用程序模塊方面考慮更多,而不僅僅是一組類。 無(wú)論如何,這是傳統(tǒng)開(kāi)發(fā)人員通過(guò)基于微服務(wù)的開(kāi)發(fā)所面臨的類似挑戰(zhàn)。 Java 9繼續(xù)添加函數(shù)式編程功能,以保持Java的活力并改進(jìn)JVM內(nèi)部。
1)Java平臺(tái)模塊系統(tǒng):小即是大
Java 9最著名的特性是Java平臺(tái)模塊系統(tǒng)(JPMS)。 這是邁向真正封裝的重要一步。 把一個(gè)大模塊打破為由密切相關(guān)的代碼和數(shù)據(jù)組成的小而清晰的模塊。 它類似于OSGi包,其中每個(gè)包定義它消耗的依賴關(guān)系并公開(kāi)其他模塊所依賴的東西。
它引入了編譯和運(yùn)行時(shí)之間的裝配階段,可以構(gòu)建JDK和JRE的自定義運(yùn)行時(shí)映像。 現(xiàn)在,JDK本身由模塊組成。
~ java --list-modules java.activation@9.0.2 java.base@9.0.2 java.compiler@9.0.2 java.corba@9.0.2 ...
這些模塊稱為系統(tǒng)模塊。 沒(méi)有模塊信息的jar被加載到未命名的模塊中。 我們可以通過(guò)在文件module-info.java中提供以下信息來(lái)定義我們自己的應(yīng)用程序模塊:
requires—依賴于其他模塊
exports—導(dǎo)出模塊中包的公共API/接口
opens— 打開(kāi)反射訪問(wèn)包
uses— 類似requires。
要了解更多信息,請(qǐng)參閱快速入門(mén)指南()。
2)創(chuàng)建模塊示例
以下是IntelliJ IDE中的快速步驟:
1. 在IntelliJ創(chuàng)建模塊: 到File > New > Module - "first.module"
2. 在模塊下的src中創(chuàng)建java類(/first.module/src)
3. 編寫(xiě)代碼
package com.test.modules.print; public class Printer { public static void print(String input){ System.out.println(input); } }
4. 添加module-info.java : /first.module/src > New > package
module first.module { exports com.test.modules.print; // 導(dǎo)出包的公共apis. }
5. 與前面相似,創(chuàng)建模塊 " main.module " 和 Main.java :
module main.module { requires first.module; }
Main文件代碼:
package com.test.modules.main; import com.test.modules.print.Printer; public class Main { public static void main(String[] args) { Printer.print("Hello World"); } }
6. IntelliJ自動(dòng)編譯它并記錄依賴項(xiàng)和--module-source-path
7.要運(yùn)行Main.java,它需要--module-path或-m
java -p /Workspaces/RnD/out/production/main.module:/Workspaces/RnD/out/production/first.module -m main.module/com.test.modules.main.Main Hello World Process finished with exit code 0
所以,通過(guò)這種方式,我們就可以定義模塊了。
3)其它新特性
Java 9附帶了許多其他功能。 下面列出了一些重要的部分(也是為了追趕競(jìng)爭(zhēng)對(duì)手):
響應(yīng)式編程 - Java 9引入了響應(yīng)流,它支持React,就像發(fā)布者和消費(fèi)者之間的異步/等待通信一樣。 它在Flow類中添加了標(biāo)準(zhǔn)接口。
JShell- Java Shell - 就像任何其他腳本語(yǔ)言一樣,Java現(xiàn)在可以用作腳本語(yǔ)言。
流和集合增強(qiáng):Java 9添加了一些與"有序"和"可選"流操作相關(guān)的API。 添加of()操作以簡(jiǎn)化創(chuàng)建集合,就像JavaScript一樣。
JVM自我調(diào)優(yōu)
G1是默認(rèn)的GC,GC中的自我調(diào)優(yōu)功能也有所改進(jìn)。CMS已被棄用。
訪問(wèn)堆棧
StackWalker類被添加到對(duì)堆棧幀的延遲訪問(wèn)中,我們可以遍歷并過(guò)濾到它。
多發(fā)行版JAR文件:MRJAR
一個(gè)Java程序可能包含與多個(gè)版本兼容的類。 說(shuō)實(shí)話,我不確定這個(gè)功能有多么有用。
7.Java 10:更接近函數(shù)型語(yǔ)言
1)類型推斷
Java 10帶來(lái)了JavaScript的var。 您不僅可以自由聲明變量的類型,還可以自由的構(gòu)建集合類型。 以下內(nèi)容在Java 10中有效:
var test = "9"; test = 1.0; var set = Set.of(5, "X", 6.5, new Object());
代碼變得越來(lái)越冗長(zhǎng),腳本語(yǔ)言的魔力越來(lái)越多地被添加到Java中。 它肯定會(huì)給Java帶來(lái)這些功能的負(fù)面影響,但它給開(kāi)發(fā)人員帶來(lái)了很多動(dòng)力。
2)更強(qiáng)大的JVM
在并行情況下,GC完全觸發(fā)G1以提高整體性能。
堆分配可以在連接到系統(tǒng)的備用存儲(chǔ)設(shè)備上分配。 它將有助于確定系統(tǒng)上Java進(jìn)程的優(yōu)先級(jí)。 與重要的優(yōu)先級(jí)相比,低優(yōu)先級(jí)的存儲(chǔ)器可以使用慢速存儲(chǔ)器。
java 10還改進(jìn)了本地握手線程中的線程處理。 還增加了前期編譯(實(shí)驗(yàn)性的)。 針對(duì)循環(huán)生成增強(qiáng)的字節(jié)碼是Java 10的另一個(gè)有趣特性。
3)增強(qiáng)的語(yǔ)言級(jí)特性
在Java 10中,我們改進(jìn)了Optional、不可修改的集合API。
感謝各位的閱讀!關(guān)于“Java11有哪些新特性”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
當(dāng)前標(biāo)題:Java11有哪些新特性-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://jinyejixie.com/article46/jeieg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站建設(shè)、App設(shè)計(jì)、小程序開(kāi)發(fā)、微信公眾號(hào)、關(guān)鍵詞優(yōu)化、網(wǎng)站設(shè)計(jì)公司
聲明:本網(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容