Java筆記--接口新特性、代碼塊
一、接口新特性
1、JDK8的新特性:接口中可以定義有方法體的方法。(默認(rèn)、靜態(tài))
假設(shè)我們?cè)陧?xiàng)目中編寫(xiě)了一個(gè)接口,里面編寫(xiě)了一堆抽象方法。然后又編寫(xiě)了接口的兩個(gè)實(shí)現(xiàn)類(lèi),并且重寫(xiě)了里面的方法。

然后項(xiàng)目1.0版本正式上線(xiàn)了
在項(xiàng)目2.0版本,需要對(duì)功能進(jìn)行一些豐富,我們要加入一些新的方法,按照以前,我們要是在接口中編寫(xiě)抽象方法,所有的實(shí)現(xiàn)類(lèi)會(huì)報(bào)錯(cuò),因?yàn)閷?shí)現(xiàn)類(lèi)要對(duì)新編寫(xiě)的抽象方法進(jìn)行重寫(xiě)。如果接口中可以使用帶有邏輯的方法,并且實(shí)現(xiàn)類(lèi)可以直接拿來(lái)用,就可以解決接口升級(jí)的問(wèn)題。
JDK8接口特性:允許在接口中定義非抽象方法,但是需要使用關(guān)鍵字default修飾,這些方法就是默認(rèn)方法。

public是可以省略的,方法的默認(rèn)權(quán)限就是public
假設(shè)我們?cè)诮涌谥芯帉?xiě)了一個(gè)method方法,在實(shí)現(xiàn)類(lèi)中直接輸入方法名敲回車(chē)

方法被重寫(xiě)了,super.調(diào)用的是父類(lèi)的方法,而加上前面的接口名.調(diào)用的是"干爹",而且在實(shí)現(xiàn)類(lèi)中的重寫(xiě)方法,不需要帶default關(guān)鍵字。
如果一個(gè)實(shí)現(xiàn)類(lèi)同時(shí)實(shí)現(xiàn)兩個(gè)接口,而且兩個(gè)接口中的方法名是相同的,我們必須在實(shí)現(xiàn)類(lèi)中將方法重寫(xiě),并且指定用哪個(gè)接口的方法。
接口中也可以編寫(xiě)靜態(tài)方法,直接通過(guò)接口名.進(jìn)行調(diào)用。
2、JDK9的新特性:接口中可以定義私有方法。
接口中的私有方法,實(shí)現(xiàn)類(lèi)不能調(diào)用有什么意義嗎?

在這個(gè)接口中,里面有兩個(gè)抽象方法,還有兩個(gè)默認(rèn)方法,但是這兩個(gè)默認(rèn)方法中有一段邏輯是重復(fù)的,代碼顯得很臃腫。我們可以將重復(fù)代碼抽取出一個(gè)新的方法,但是這個(gè)方法不想讓別人使用,可以加上private,但是不能加default。接口中的私有方法不能帶default。

三、代碼塊
使用{ }括起來(lái)的內(nèi)容就是代碼塊。
分為局部代碼塊、構(gòu)造代碼塊、靜態(tài)代碼塊、同步代碼塊四類(lèi)。
1、局部代碼塊
位置:方法中的一對(duì)大括號(hào)。
作用:限定變量的生命周期,提早的釋放內(nèi)存。
2、構(gòu)造代碼塊
位置:類(lèi)中,方法外。


可以看見(jiàn),在創(chuàng)建對(duì)象,執(zhí)行構(gòu)造方法的時(shí)候,就會(huì)執(zhí)行構(gòu)造代碼塊,優(yōu)先于構(gòu)造方法執(zhí)行。
上面的圖在字節(jié)碼文件中是這樣的:

我們?cè)谠次募械臉?gòu)造代碼塊,在編譯后,會(huì)分散到該類(lèi)的每一個(gè)構(gòu)造方法中,而且還是在構(gòu)造方法的最開(kāi)始的位置存放。
3、靜態(tài)代碼塊
位置:類(lèi)中方法外,需要加入static關(guān)鍵字。
特點(diǎn):隨著類(lèi)的加載而執(zhí)行,因?yàn)轭?lèi)只加載一次,所以它只執(zhí)行一次。
實(shí)例:如果以后我們要賦值的不是基本數(shù)據(jù)類(lèi)型,而是對(duì)象類(lèi)型,就可以用靜態(tài)代碼塊來(lái)賦值。