Java 8 新特性

Java8 新增了非常多的特性

1、Lambda 表達式

Lambda允許把函數作爲一個方法的參數(函數作爲參數傳遞進方法中)。
lambda 表達式只能引用標記了 final 的外層局部變量,這就是說不能在 lambda 內部修改定義在域外的局部變量,否則會編譯錯誤

2、方法引用(方法引用使用一對冒號 ::)

方法引用提供了非常有用的語法,可以直接引用已有Java類或對象(實例)的方法或構造器。與lambda聯合使用,方法引用可以使語言的構造更緊湊簡潔,減少冗餘代碼。

3、函數式接口(Functional Interface)

就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口。

4、默認方法

默認方法就是一個在接口裏面有了一個實現的方法。

5、Stream API

新添加的Stream API(java.util.stream) 把真正的函數式編程風格引入到Java中。可以極大提高Java程序員的生產力,讓程序員寫出高效率、乾淨、簡潔的代碼。
這種風格將要處理的元素集合看作一種流, 流在管道中傳輸, 並且可以在管道的節點上進行處理, 比如篩選, 排序,聚合等。
元素流在管道中經過中間操作(intermediate operation)的處理,最後由最終操作(terminal operation)得到前面處理的結果。
Stream操作還有兩個基礎的特徵:
Pipelining: 中間操作都會返回流對象本身。 這樣多個操作可以串聯成一個管道, 如同流式風格(fluent style)。 這樣做可以對操作進行優化, 比如延遲執行(laziness)和短路( short-circuiting)。
內部迭代: 以前對集合遍歷都是通過Iterator或者For-Each的方式, 顯式的在集合外部進行迭代, 這叫做外部迭代。 Stream提供了內部迭代的方式, 通過訪問者模式(Visitor)實現
在 Java 8 中, 集合接口有兩個方法來生成流:
stream() − 爲集合創建串行流。
parallelStream() − 爲集合創建並行流。
流方法:
forEach:Stream 提供了新的方法 'forEach' 來迭代流中的每個數據
map:用於映射每個元素到對應的結果
filter:用於通過設置的條件過濾出元素
imit:用於獲取指定數量的流
sorted:用於對流進行排序
parallelStream:並行處理程序的代替方法
Collectors:類實現了很多歸約操作,例如將流轉換成集合和聚合元素
統計:最大、最小、總和、平均

6、Optional 類

Optional 類已經成爲 Java 8 類庫的一部分,用來解決空指針異常。

7、Nashorn, JavaScript 引擎

Java 8提供了一個新的Nashorn javascript引擎,它允許我們在JVM上運行特定的javascript應用。

8、Date Time API

加強對日期與時間的處理。
在舊版的 Java 中,日期時間 API 存在諸多問題,其中有:
非線程安全 − java.util.Date 是非線程安全的,所有的日期類都是可變的,這是Java日期類最大的問題之一。
設計很差 − Java的日期/時間類的定義並不一致,在java.util和java.sql的包中都有日期類,此外用於格式化和解析的類在java.text包中定義。java.util.Date同時包含日期和時間,而java.sql.Date僅包含日期,將其納入java.sql包並不合理。另外這兩個類都有相同的名字,這本身就是一個非常糟糕的設計。
時區處理麻煩 − 日期類並不提供國際化,沒有時區支持,因此Java引入了java.util.Calendar和java.util.TimeZone類,但他們同樣存在上述所有的問題。

Java 8 在 java.time 包下提供了很多新的 API。以下爲兩個比較重要的 API:
Local(本地) − 簡化了日期時間的處理,沒有時區的問題。
Zoned(時區) − 通過制定的時區處理日期時間。

新的java.time包涵蓋了所有處理日期,時間,日期/時間,時區,時刻(instants),過程(during)與時鐘(clock)的操作。

9、Base64編碼

在Java 8中,Base64編碼已經成爲Java類庫的標準。

Java 8 內置了 Base64 編碼的編碼器和解碼器。

Base64工具類提供了一套靜態方法獲取下面三種BASE64編解碼器:

基本:輸出被映射到一組字符A-Za-z0-9+/,編碼不添加任何行標,輸出的解碼僅支持A-Za-z0-9+/。
URL:輸出映射到一組字符A-Za-z0-9+_,輸出是URL和文件。
MIME:輸出隱射到MIME友好格式。輸出每行不超過76字符,並且使用'r'並跟隨'n'作爲分割。編碼輸出最後沒有行分割。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章