Java (8-11) 新特性 (筆記)

來(lái)源:拉勾教育Java就業(yè)集訓(xùn)營(yíng)

Java8的新特性

Java8的概述

Java8是 Java 語(yǔ)言的一個(gè)重要版本蚀浆,該版本于2014年3月發(fā)布,是自Java5以來(lái)最具革命性的版 本,這個(gè)版本包含語(yǔ)言、編譯器箱蝠、庫(kù)泌绣、工具和JVM等方面的十多個(gè)新特性。

函數(shù)式接口
  • 函數(shù)式接口主要指只包含一個(gè)抽象方法的接口晃财,如:java.lang.Runnable、java.util.Comparator 接口等典蜕。
  • Java8提供@FunctionalInterface注解來(lái)定義函數(shù)式接口断盛,若定義的接口不符合函數(shù)式的規(guī)范便會(huì)報(bào)錯(cuò)。
  • Java8中增加了java.util.function包愉舔,該包包含了常用的函數(shù)式接口钢猛,具體如下:
接口名稱 方法聲明 功能介紹
Consumer void accept(T t) 根據(jù)指定的參數(shù)執(zhí)行操作
Supplier T get() 得到一個(gè)返回值
Function R apply(T t) 根據(jù)指定的參數(shù)執(zhí)行操作并返回
Predicate boolean test(T t) 判斷指定的參數(shù)是否滿足條件
Lambda表達(dá)式
  • Lambda 表達(dá)式是實(shí)例化函數(shù)式接口的重要方式,使用 Lambda 表達(dá)式可以使代碼變的更加簡(jiǎn)潔 緊湊屑宠。
  • lambda表達(dá)式:參數(shù)列表厢洞、箭頭符號(hào)->和方法體組成,而方法體中可以是表達(dá)式,也可以是語(yǔ)句 塊躺翻。
  • 語(yǔ)法格式:(參數(shù)列表) -> { 方法體; } - 其中()丧叽、參數(shù)類型、{} 以及return關(guān)鍵字 可以省略公你。
方法引用
  • 方法引用主要指通過(guò)方法的名字來(lái)指向一個(gè)方法而不需要為方法引用提供方法體踊淳,該方法的調(diào)用交 給函數(shù)式接口執(zhí)行。
  • 方法引用使用一對(duì)冒號(hào) :: 將類或?qū)ο笈c方法名進(jìn)行連接陕靠,通常使用方式如下:
    • 對(duì)象的非靜態(tài)方法引用 ObjectName :: MethodName
    • 類的靜態(tài)方法引用 ClassName :: StaticMethodName
    • 類的非靜態(tài)方法引用 ClassName :: MethodName //其中一個(gè)參數(shù)對(duì)象作為調(diào)用對(duì)象來(lái)調(diào)用方法時(shí)
    • 構(gòu)造器的引用 ClassName :: new
    • 數(shù)組的引用 TypeName[] :: new //Function<Integer,Person[]> function3=Person[]::new;
  • 方法引用是在特定場(chǎng)景下lambda表達(dá)式的一種簡(jiǎn)化表示迂尝,可以進(jìn)一步簡(jiǎn)化代碼的編寫使代碼更加 緊湊簡(jiǎn)潔,從而減少冗余代碼剪芥。
Stream接口
(1)基本概念
  • java.util.stream.Stream接口是對(duì)集合功能的增強(qiáng)垄开,可以對(duì)集合元素進(jìn)行復(fù)雜的查找、過(guò)濾税肪、篩選 等操作溉躲。
  • Stream接口借助于Lambda 表達(dá)式極大的提高編程效率和程序可讀性,同時(shí)它提供串行和并行兩 種模式進(jìn)行匯聚操作益兄,并發(fā)模式能夠充分利用多核處理器的優(yōu)勢(shì)锻梳。
(2)使用步驟
  • 創(chuàng)建Stream,通過(guò)一個(gè)數(shù)據(jù)源來(lái)獲取一個(gè)流净捅。
  • 轉(zhuǎn)換Stream疑枯,每次轉(zhuǎn)換返回一個(gè)新的Stream對(duì)象。
  • 對(duì)Stream進(jìn)行聚合操作并產(chǎn)生結(jié)果蛔六。
(3)創(chuàng)建方式
  • 方式一:通過(guò)調(diào)用集合的默認(rèn)方法來(lái)獲取流荆永,如:default Stream stream()
  • 方式二:通過(guò)數(shù)組工具類中的靜態(tài)方法來(lái)獲取流,如:static IntStream stream(int[] array)
  • 方式三:通過(guò)Stream接口的靜態(tài)方法來(lái)獲取流古今,如:static Stream of(T... values)
  • 方式四:通過(guò)Stream接口的靜態(tài)方法來(lái)獲取流屁魏,static Stream generate(Supplier s)
(4)中間操作
  • 篩選與切片的常用方法如下:

    方法聲明 功能介紹
    Stream filter(Predicate predicate) 返回一個(gè)包含匹配元素的流
    Stream distinct() 返回不包含重復(fù)元素的流
    Stream limit(long maxSize) 返回不超過(guò)給定元素?cái)?shù)量的流
    Stream skip(long n) 返回丟棄前n個(gè)元素后的流
  • 映射的常用方法如下:

    方法聲明 功能介紹
    Stream map(Function mapper) 返回每個(gè)處理過(guò)元素組成的流
    Stream flatMap(Function mapper) 返回每個(gè)被替換過(guò)元素組成的流滔以,并 將所有流合成一個(gè)流
  • 排序的常用方法如下:

    方法聲明 功能介紹
    Stream sorted() 返回經(jīng)過(guò)自然排序后元素組成的流
    Stream sorted(Comparator comparator) 返回經(jīng)過(guò)比較器排序后元素組成的流
(5)終止操作
  • 匹配與查找的常用方法如下:

    方法聲明 功能介紹
    Optional findFirst() 返回該流的第一個(gè)元素
    boolean allMatch(Predicate predicate) 返回所有元素是否匹配
    boolean noneMatch(Predicate predicate) 返回沒(méi)有元素是否匹配
    Optional max(Comparator comparator) 根據(jù)比較器返回最大元素
    Optional min(Comparator comparator) 根據(jù)比較器返回最小元素
    long count() 返回元素的個(gè)數(shù)
    void forEach(Consumer action) 對(duì)流中每個(gè)元素執(zhí)行操作
  • 規(guī)約的常用方法如下:

    方法聲明 功能介紹
    Optional reduce(BinaryOperator accumulator) 返回結(jié)合后的元素值
  • 收集的常用方法如下:

    方法聲明 功能介紹
    R collect(Collector collector) 使用收集器對(duì)元素進(jìn)行處理
Optional類
(1)基本概念
  • java.util.Optional類可以理解為一個(gè)簡(jiǎn)單的容器捉腥,其值可能是null或者不是null,代表一個(gè)值存在 或不存在你画。
  • 該類的引入很好的解決空指針異常抵碟,不用顯式進(jìn)行空值檢測(cè)。
(2)常用的方法
方法聲明 功能介紹
static Optional ofNullable(T value) 根據(jù)參數(shù)指定數(shù)值來(lái)得到Optional類型的對(duì) 象
Optional map(Function mapper) 根據(jù)參數(shù)指定規(guī)則的結(jié)果來(lái)得到Optional類 型的對(duì)象
T orElse(T other) 若該值存在就返回坏匪,否則返回other的數(shù) 值拟逮。

Java9的新特性

Java9的概述
  • Java9發(fā)布于2017年9月發(fā)布,帶來(lái)了很多新特性适滓,其中最主要的變化是模塊化系統(tǒng)敦迄。
  • 模塊就是代碼和數(shù)據(jù)的封裝體,模塊的代碼被組織成多個(gè)包,每個(gè)包中包含Java類和接口罚屋,模塊的 數(shù)據(jù)則包括資源文件和其他靜態(tài)信息苦囱。
模塊化的使用
(1)語(yǔ)法格式
//在 module-info.java 文件中,我們可以用新的關(guān)鍵詞module來(lái)聲明一個(gè)模塊脾猛,具體如下:
module 模塊名稱 {
}
module java91 {
    exports com.lagou2; //導(dǎo)出
}
module java92 {
    requires java91;    //導(dǎo)入
}

(2)模塊化的優(yōu)勢(shì)
  • 減少內(nèi)存的開銷撕彤。
  • 可簡(jiǎn)化各種類庫(kù)和大型應(yīng)用的 開發(fā)和維護(hù)。
  • 安全性猛拴,可維護(hù)性羹铅,提高性能。
鉆石操作符的使用升級(jí)

在Java9中允許在匿名內(nèi)部類的使用中使用鉆石操作符愉昆。

集合工廠方法
(1)基本概念
  • Java9的List职员、Set和Map集合中增加了靜態(tài)工廠方法of實(shí)現(xiàn)不可變實(shí)例的創(chuàng)建。
  • 不可變體現(xiàn)在無(wú)法添加跛溉、修改和刪除它們的元素廉邑。 //添加、修改和刪除時(shí)報(bào)錯(cuò) UnsupportedOperationException 不支持操作異常
  • 不允許添加null元素對(duì)象倒谷。
(2)實(shí)際意義
  • 保證線程安全:在并發(fā)程序中既保證線程安全性蛛蒙,也大大增強(qiáng)了并發(fā)時(shí)的效率。
  • 被不可信的類庫(kù)使用時(shí)會(huì)很安全渤愁。
  • 如果一個(gè)對(duì)象不需要支持修改操作牵祟,將會(huì)節(jié)省空間和時(shí)間的開銷。
  • 可以當(dāng)作一個(gè)常量來(lái)對(duì)待抖格,并且這個(gè)對(duì)象在以后也不會(huì)被改變诺苹。
InputStream的增強(qiáng)

InputStream類中提供了transferTo方法實(shí)現(xiàn)將數(shù)據(jù)直接傳輸?shù)絆utputStream中。

Java10的新特性

Java10的概述
  • Java10于2018年3月發(fā)布雹拄,改進(jìn)的關(guān)鍵點(diǎn)包括一個(gè)本地類型推斷收奔、一個(gè)垃圾回收的增強(qiáng)。
  • Java10計(jì)劃只是一個(gè)短期版本滓玖,因此公開更新將在六個(gè)月內(nèi)結(jié)束坪哄,9月份發(fā)布的Java11將是Java的 長(zhǎng)期支持(LTS)版本,LTS版本的發(fā)布每三年發(fā)布一次势篡。
局部變量類型推斷
(1)基本概念
  • Java10可以使用var作為局部變量類型推斷標(biāo)識(shí)符翩肌,此符號(hào)僅適用于局部變量,增強(qiáng)for循環(huán)的索 引禁悠,以及傳統(tǒng)for循環(huán)的本地變量念祭。
  • 它不能使用于方法形式參數(shù),構(gòu)造函數(shù)形式參數(shù)碍侦,方法返回類型粱坤,字段隶糕,catch形式參數(shù)或任何其 他類型的變量聲明。
(2)實(shí)際意義
  • 標(biāo)識(shí)符var不是關(guān)鍵字站玄,只是一個(gè)保留的類型名稱若厚。這意味著var用作變量,方法名或包名的代碼不 會(huì)受到影響蜒什,但var不能作為類或則接口的名字测秸。
  • 避免了信息冗余。
  • 對(duì)齊了變量名灾常。
  • 更容易閱讀霎冯。

Java11的新特性

Java11的概述

Java11于2018年9月正式發(fā)布,這是 Java 大版本周期變化 后的第一個(gè)長(zhǎng)期支持版本钞瀑,非常值得關(guān)注沈撞。

簡(jiǎn)化的編譯運(yùn)行操作
  • 在Java11中可以使用java命令一次性進(jìn)行編譯和運(yùn)行操作。
  • 執(zhí)行源文件中的第一個(gè)類必須包含主方法雕什。
  • 不可以使用其它源文件中自定義的類缠俺。
String類新增方法
方法聲明 功能介紹
boolean isBlank() 判斷字符串是否為空或只包含空白代碼點(diǎn)
Optional map(Function mapper) 根據(jù)參數(shù)指定規(guī)則的結(jié)果來(lái)得到Optional類 型的對(duì)象
T orElse(T other) 若該值存在就返回,否則返回other的數(shù) 值贷岸。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末壹士,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子偿警,更是在濱河造成了極大的恐慌躏救,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件螟蒸,死亡現(xiàn)場(chǎng)離奇詭異盒使,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)七嫌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門少办,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人诵原,你說(shuō)我怎么就攤上這事英妓。” “怎么了皮假?”我有些...
    開封第一講書人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵鞋拟,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我惹资,道長(zhǎng),這世上最難降的妖魔是什么航闺? 我笑而不...
    開封第一講書人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任褪测,我火速辦了婚禮猴誊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘侮措。我一直安慰自己懈叹,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開白布分扎。 她就那樣靜靜地躺著澄成,像睡著了一般。 火紅的嫁衣襯著肌膚如雪畏吓。 梳的紋絲不亂的頭發(fā)上墨状,一...
    開封第一講書人閱讀 51,365評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音菲饼,去河邊找鬼肾砂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛宏悦,可吹牛的內(nèi)容都是我干的镐确。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼饼煞,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼源葫!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起砖瞧,我...
    開封第一講書人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤臼氨,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后芭届,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體储矩,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年褂乍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了持隧。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡逃片,死狀恐怖屡拨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情褥实,我是刑警寧澤呀狼,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站损离,受9級(jí)特大地震影響哥艇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜僻澎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一貌踏、第九天 我趴在偏房一處隱蔽的房頂上張望十饥。 院中可真熱鬧,春花似錦祖乳、人聲如沸逗堵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蜒秤。三九已至,卻和暖如春亚斋,著一層夾襖步出監(jiān)牢的瞬間作媚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工伞访, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掂骏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓厚掷,卻偏偏與公主長(zhǎng)得像弟灼,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子冒黑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容