簡述1 8特性

2021-10-25 05:04:42 字數 1951 閱讀 6980

隨著技術的不斷發展,jdk8也坐上了業界的頭把交椅,在此簡單敘述下8較之以往的部分新特性

函式式介面必須有且只有乙個抽象方法,可有0或多個default方法,default方法無需實現,可在實現類中直接呼叫,可有0或多個static方法,函式式介面中的default和static方法,都可通過inte***ce.method()的方式直接呼叫,其中註解@functionalinte***ce可用來限制函式式介面不能修改為普通的介面。

需要注意以下幾點:

**如下(示例)

//介面

@functionalinte***ce

public

inte***ce

inte***cetest

;static

void

staticmethod()

;}//實現類

public

class

lambdatest

implements

lambdainte***ce

@override

public

void

******method()

}

我們可以把lambda表示式可以看成匿名內部類的簡寫方式。前提是這個匿名內部類必須是乙個函式式介面,其基本語法為:(引數列表) -> ,在jdk1.8中comparator和runnable介面就是典型的函式式介面,下面以comparator介面來演示

需要注意以下幾點:

**如下(示例):

list

list = arrays.

aslist(1

,3,2

);collections.

sort

(list,

newcomparator

()})

;//根據基本語法(引數列表) -> 寫為

list.

sort

((integer o1,integer o2)

->);

//根據簡化規則可簡寫為

list.

sort

((o1,o2)

-> o1 - o2 )

;

在日常書寫**的過程,我們需要經常對變數進行判空處理,才有可能避免空指標問題。optional的出現在一定程度上幫我們解決了這個問題。

在這段**中,只要user或address為空就會導致空指標

string postcode = user.

getaddress()

.getpostcode()

;

如果想要避免這個問題,我們需要把**寫成這樣

string postcode ="";

if(user != null)

}

當我們引入optional時可以把**寫成這樣

string postcode= optional.

ofnullable

(user)

.flatmap

(u -

> u.

getaddress()

).flatmap

(a -

> a.

getcountry()

).map(c -

> c.

getisocode()

).orelse

("default postcode"

);

關於optional現在個人只懂這麼多,有內容之後再補充吧

新的特性還有stream api、新的date類、hashmpa實現的改變,剩下的以後再說

個人感覺lambda表示式和optional更像是語法糖,雖然會讓**看起來簡潔很多,卻犧牲了一部分可讀性,當團隊內技術水平良莠不齊的時候,這將會增大**更新維護的成本

Java之final特性簡述

1 final變數 一旦宣告的final變數被賦值後,就不能改變該變數的值。乙個既是static又是final的字段只佔據一段不能改變的儲存空間。2 final方法 被final定義的方法不能被重寫,乙個定義為private的方法隱式的被指定為final型別。定義為final的方法可以使執行時的效率...

JDK1 8的新特性

jdk1.8之前的介面不可以有方法體,但從jdk1.8開始,介面中的方法可以帶有方法體為什麼要新增這個特性?介面就是為了定義乙個標準,這個標準要求所有的實現類實現這些抽象方法。但存在某些方法,所有的實現類 都是一樣的,索性就把這些 挪到介面中。使用的方法?通過default來修飾這個方法public...

JDK1 8新特性簡介

可以用static default來定義介面方法 用default來定義普通方法,這樣子類就不用強制覆寫這個方法了。用static來定義靜態方法 專給lanmda使用的介面加上annotation functionalinte ce 其中只能有乙個方法 使用 引數 程式執行語句 引數 簡單返回 引數...