來(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ù) 值贷岸。 |