欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java11 發(fā)布前抓緊掌握這些新特性

 更新時間:2018年09月14日 15:33:56   作者:牛旦教育IT課堂  
Java 11即將發(fā)布,你準(zhǔn)備好了? 在這篇文章中,我們討論下在進(jìn)入Java 11之前,你需要了解的Java 8、9和10的一些有用功能,若還在用Java 8以前的版本,那就太落伍了,這里首先要明確,Java 8:是一個針對傳統(tǒng)傳統(tǒng)版本的重大轉(zhuǎn)變

快速回顧
1.Lambda表達(dá)式: (參數(shù)) -> {主體}
Lambda表達(dá)式打開了函數(shù)式編程愛好者繼續(xù)使用Java的大門。Lambda表達(dá)式需要零個或多個參數(shù),這些參數(shù)可以在表達(dá)式主體中訪問,并隨計算結(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),請參閱java.util.function包,其擁有:Function,Supplier,Consumer,Predicate等。還可以使用下面注解來定義函數(shù)接口:
@FunctionalInterface
接口還可以具有方法的一個或多個默認(rèn)實現(xiàn),并且仍然可以保持為函數(shù)接口。它有助于避免不必要的抽象基類的默認(rèn)實現(xiàn)。
可以使用::操作符訪問靜態(tài)和實例方法,并且可以使用 ::new訪問構(gòu)造函數(shù),并且可以將它們作為函數(shù)參數(shù)傳遞,例如System.out::println .
3.流:不僅僅是迭代
流是一系列對象和操作。 接口中添加了許多默認(rèn)方法,以支持流的forEach, filter, map和reduce構(gòu)造。提供集合的Java庫現(xiàn)在支持流。 例如 BufferredReader.lines()。 所有集合都可以輕松轉(zhuǎn)換為流。 還支持并行流操作,它在內(nèi)部分配到多個CPU上的操作。
1)中間操作:懶惰性操作
對中間操作的懶惰執(zhí)行時,在調(diào)用終止操作之前不會發(fā)生任何事情。
map(mapping):每個元素是一對一的,并轉(zhuǎn)換為另一種形式。
filter(predicate):給定謂詞為true的過濾元素。
peek(),limit()和sorted()是其他中間操作。
2)終止操作:結(jié)果化操作
forEach(consumer):遍歷每個元素并消費該元素
reduce(initialValue,accumulator):它以initialValue開頭,并在每個元素上迭代,并以最終返回的值來保持值更新。
collect(collector):這是一個懶惰的評估結(jié)果,需要使用收集器收集,例如java.util.stream.Collectors,包括toList(),join(),summarizingX(),averagingX(),groupBy(), 和partitionBy()。
4. Optional:消除Null編程
基于Null的編程被認(rèn)為是糟糕的,但幾乎沒有任何選擇可以提前避免它。我們現(xiàn)在可以在Optional對象中測試isPresent(),而不是測試null。 讀取它(流也有多個構(gòu)造和操作)返回Optional對象。
5. JVM變化:PermGen已退役
PermGen已被完全刪除并被MetaSpace取代。 元空間(Metaspace)不再是堆內(nèi)存的一部分,而是分配給進(jìn)程的本機(jī)內(nèi)存的一部分。 JVM調(diào)優(yōu)現(xiàn)在需要不同的方面,因為監(jiān)控是必需的,不僅對于堆,而且也包括對本機(jī)內(nèi)存。
某些GC的組合已棄用。 GC根據(jù)環(huán)境配置自動分配。
還有其它的變化,包括NIO、DateTime、Security、簡潔的JDK配置文件以及jDeps,jjs,JavaScript Engine工具等。
6.Java 9:延續(xù)上一版慣例
Java 9已經(jīng)存在了一年多了,繼續(xù)保持8的傳統(tǒng)。 但它的關(guān)鍵特征模塊系統(tǒng)仍然沒有很好地被采用。 在我看來,在主流中真正采用這些功能還需要更多時間。 它以設(shè)計類的方式挑戰(zhàn)開發(fā)人員。 他們現(xiàn)在需要在應(yīng)用程序模塊方面考慮更多,而不僅僅是一組類。 無論如何,這是傳統(tǒng)開發(fā)人員通過基于微服務(wù)的開發(fā)所面臨的類似挑戰(zhàn)。 Java 9繼續(xù)添加函數(shù)式編程功能,以保持Java的活力并改進(jìn)JVM內(nèi)部。
1)Java平臺模塊系統(tǒng):小即是大
Java 9最著名的特性是Java平臺模塊系統(tǒng)(JPMS)。 這是邁向真正封裝的重要一步。 把一個大模塊打破為由密切相關(guān)的代碼和數(shù)據(jù)組成的小而清晰的模塊。 它類似于OSGi包,其中每個包定義它消耗的依賴關(guān)系并公開其他模塊所依賴的東西。
它引入了編譯和運(yùn)行時之間的裝配階段,可以構(gòu)建JDK和JRE的自定義運(yùn)行時映像。 現(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)模塊。 沒有模塊信息的jar被加載到未命名的模塊中。 我們可以通過在文件module-info.java中提供以下信息來定義我們自己的應(yīng)用程序模塊:
requires—依賴于其他模塊
exports—導(dǎo)出模塊中包的公共API/接口
opens— 打開反射訪問包
uses— 類似requires。
要了解更多信息,請參閱快速入門指南()。
2)創(chuàng)建模塊示例
以下是IntelliJ IDE中的快速步驟:
1. 在IntelliJ創(chuàng)建模塊: 到File > New > Module - "first.module"
2. 在模塊下的src中創(chuàng)建java類(/first.module/src)
3. 編寫代碼

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自動編譯它并記錄依賴項和--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

所以,通過這種方式,我們就可以定義模塊了。
3)其它新特性
Java 9附帶了許多其他功能。 下面列出了一些重要的部分(也是為了追趕競爭對手):
響應(yīng)式編程 - Java 9引入了響應(yīng)流,它支持React,就像發(fā)布者和消費者之間的異步/等待通信一樣。 它在Flow類中添加了標(biāo)準(zhǔn)接口。
JShell- Java Shell - 就像任何其他腳本語言一樣,Java現(xiàn)在可以用作腳本語言。
流和集合增強(qiáng):Java 9添加了一些與"有序"和"可選"流操作相關(guān)的API。 添加of()操作以簡化創(chuàng)建集合,就像JavaScript一樣。
JVM自我調(diào)優(yōu)
G1是默認(rèn)的GC,GC中的自我調(diào)優(yōu)功能也有所改進(jìn)。CMS已被棄用。
訪問堆棧
StackWalker類被添加到對堆棧幀的延遲訪問中,我們可以遍歷并過濾到它。
多發(fā)行版JAR文件:MRJAR
一個Java程序可能包含與多個版本兼容的類。 說實話,我不確定這個功能有多么有用。
7.Java 10:更接近函數(shù)型語言
1)類型推斷
Java 10帶來了JavaScript的var。 您不僅可以自由聲明變量的類型,還可以自由的構(gòu)建集合類型。 以下內(nèi)容在Java 10中有效:

var test = "9";
test = 1.0;
var set = Set.of(5, "X", 6.5, new Object());

代碼變得越來越冗長,腳本語言的魔力越來越多地被添加到Java中。 它肯定會給Java帶來這些功能的負(fù)面影響,但它給開發(fā)人員帶來了很多動力。
2)更強(qiáng)大的JVM
在并行情況下,GC完全觸發(fā)G1以提高整體性能。
堆分配可以在連接到系統(tǒng)的備用存儲設(shè)備上分配。 它將有助于確定系統(tǒng)上Java進(jìn)程的優(yōu)先級。 與重要的優(yōu)先級相比,低優(yōu)先級的存儲器可以使用慢速存儲器。
java 10還改進(jìn)了本地握手線程中的線程處理。 還增加了前期編譯(實驗性的)。 針對循環(huán)生成增強(qiáng)的字節(jié)碼是Java 10的另一個有趣特性。
3)增強(qiáng)的語言級特性
在Java 10中,我們改進(jìn)了Optional、不可修改的集合API。

結(jié)論
我們已經(jīng)看到了從Java 8到Java 10的歷程以及Java受其他函數(shù)和腳本語言的影響。 Java是一種強(qiáng)大的面向?qū)ο缶幊陶Z言,同時,它現(xiàn)在支持許多功能型結(jié)構(gòu)。 Java不僅會帶來其他語言的頂級功能,還會不斷改進(jìn)內(nèi)部功能。 它正以極快的速度發(fā)展,保持跟進(jìn)——在它逐步淘汰之前! 因為,Java 11、12已在路上!
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接

相關(guān)文章

  • Springboot中如何使用Redisson實現(xiàn)分布式鎖淺析

    Springboot中如何使用Redisson實現(xiàn)分布式鎖淺析

    redisson是redis的java客戶端程序,國內(nèi)外很多公司都有在用,下面這篇文章主要給大家介紹了關(guān)于Springboot中如何使用Redisson實現(xiàn)分布式鎖的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • SpringCloud?@RefreshScope刷新機(jī)制淺析

    SpringCloud?@RefreshScope刷新機(jī)制淺析

    RefeshScope這個注解想必大家都用過,在微服務(wù)配置中心的場景下經(jīng)常出現(xiàn),他可以用來刷新Bean中的屬性配置,那大家對他的實現(xiàn)原理了解嗎?它為什么可以做到動態(tài)刷新呢
    2023-03-03
  • alibaba?seata服務(wù)端具體實現(xiàn)

    alibaba?seata服務(wù)端具體實現(xiàn)

    seata是來處理分布式服務(wù)之間互相調(diào)用的事務(wù)問題,本文重點給大家介紹alibaba-seata實現(xiàn)方法,文中通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • 教你利用springboot集成swagger并生成接口文檔

    教你利用springboot集成swagger并生成接口文檔

    有很多小伙伴不會利用springboot集成swagger并生成接口文檔,今天特地整理了這篇文章,文中有非常詳細(xì)的代碼圖文介紹及代碼示例,對不會這個方法的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • maven install報錯中程序包xxx不存在的問題解決

    maven install報錯中程序包xxx不存在的問題解決

    本文主要介紹了maven install報錯中程序包xxx不存在的問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • Java實現(xiàn)按中文首字母排序的具體實例

    Java實現(xiàn)按中文首字母排序的具體實例

    這篇文章主要介紹了Java實現(xiàn)按中文首字母排序的具體實例,有需要的朋友可以參考一下
    2013-12-12
  • OGNL表達(dá)式基本語法與用法詳解

    OGNL表達(dá)式基本語法與用法詳解

    這篇文章主要介紹了OGNL表達(dá)式基本語法與用法詳解,具有一定參考價值。需要的朋友可以了解下。
    2017-09-09
  • springboot aop添加日志方式

    springboot aop添加日志方式

    這篇文章主要介紹了springboot aop添加日志方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • java顯示當(dāng)前美國洛杉磯時間

    java顯示當(dāng)前美國洛杉磯時間

    這篇文章主要介紹了java顯示當(dāng)前美國洛杉磯時間的方法,也就是當(dāng)前時間的切換,需要的朋友可以參考下
    2014-02-02
  • 解析Java多線程之常見鎖策略與CAS中的ABA問題

    解析Java多線程之常見鎖策略與CAS中的ABA問題

    本篇文章介紹了常見的鎖策略,并說明了synchronized關(guān)鍵字加的鎖類型不是單一一種鎖類型的,根據(jù)可重入鎖與非可重入鎖引出了死鎖的概念與死鎖條件,最后介紹了CAS指令以及CAS鎖產(chǎn)生的ABA問題及其解決方案,需要的朋友可以參考下
    2022-06-06

最新評論