999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Lambda表達(dá)式在Java編程中的應(yīng)用

2019-03-25 08:21:24任憲臻
中國科技縱橫 2019年3期

任憲臻

摘 要:Lambda表達(dá)式是Java 8發(fā)布的最重要的新特性。在Java編程中,可以應(yīng)用Lambda表達(dá)式替換匿名內(nèi)部類,而且使用Lambda表達(dá)式可以使編寫的Java代碼看起來更加簡短,使用起來也更加方便。應(yīng)用Lambda表達(dá)式進(jìn)行編程及應(yīng)用Lambda表達(dá)式的場合是本文講述的重點(diǎn)。

關(guān)鍵詞:Lambda;表達(dá)式;函數(shù)式接口;匿名方法

中圖分類號:TP312 文獻(xiàn)標(biāo)識碼:A 文章編號:1671-2064(2019)03-0014-02

雖然Lambda表達(dá)式是JDK1.8引入的最重要的新增功能,但是其實(shí)在很多編程語言中都引入了Lambda表達(dá)式。其實(shí)簡單來說,Lambda 表達(dá)式就是一個匿名方法,但是它又跟匿名方法不太一樣。Lambda表達(dá)式在應(yīng)用的時候,首先需要定義一個函數(shù)式接口。函數(shù)式接口也是JDK1.8中的新概念,它只允許有且僅有一個抽象方法,但是在函數(shù)式接口中,可以包含多個非抽象方法。

1 Lambda表達(dá)式的使用

Lambda表達(dá)式通常用表示如下:

(參數(shù)列表)->表達(dá)式,或者(參數(shù)列表)->{語句行;}

圖1所示的例子展示了Lambda表達(dá)式的應(yīng)用。從這個例子中,我們可以總結(jié)出在使用lambda表達(dá)式時要注意以下幾點(diǎn):

(1)在Lambda表達(dá)式中,編譯器可以識別參數(shù)值類型,所以可以聲明參數(shù)類型,也可以不聲明。

(2)如果Lambda表達(dá)式只有一個參數(shù),那么可以不必使用圓括號,但是如果有兩個或兩個以上的參數(shù),必須把參數(shù)放到圓括號中,并且參數(shù)之間都用逗號間隔。

(3)如果Lambda表達(dá)式的主體部分只有一個語句,那么可以不需要使用大括號,但是如果有多個語句,則必須把所有語句放在大括號中。

(4)如果Lambda表達(dá)式只有一條語句返回值,那么可以省略return關(guān)鍵字,但是有多條語句并且有返回值,那么必須使用return關(guān)鍵字來返回值。

Lambda表達(dá)式主要用來定義類內(nèi)執(zhí)行的方法類型接口,所以在上面圖1所示的例子中,我們使用各種類型的Lambda表達(dá)式來定義Arithmetic接口的方法。而且Lambda 表達(dá)式免去了使用匿名方法的麻煩,并且給予Java簡單但是強(qiáng)大的函數(shù)化的編程能力。

2 變量的引用

2.1 訪問外層作用域定義的局部變量

lambda表達(dá)式可以訪問外層作用域定義的局部變量,而且必須是經(jīng)初始化的局部變量,但是它不能修改外層局部變量的值。即:lambda表達(dá)式的局部變量可以不用聲明為final,但是具有隱性final的語義,所以變量值不能被修改,否則會報編譯錯誤。因此,未初始化的外層局部變量不能被lambda表達(dá)式訪問,也不能在lambda塊內(nèi)對其初始化。

因此,從圖2例子中我們可以看出,使用Lambda表達(dá)式外層作用域定義的局部變量時,雖然該局部變量沒有被顯式聲明修飾符為final,但是在Lambda表達(dá)式中訪問此局部變量時,該變量自動會具有final的語義,這是編譯器的需求,也就是說如果在Lambda表達(dá)式中訪問的局部變量,如果不是final類型的話,編譯器自動加上final修飾符。

2.2 獲取或者更改外層類的屬性

lambda表達(dá)式內(nèi)可以通過this關(guān)鍵字(或不使用)訪問或修改類的屬性。但是如果外層類的屬性是final標(biāo)識的,則lambda內(nèi)只能訪問,不可以修改。而如果外層類的屬性是static標(biāo)識的,則仍然可以訪問和多次修改。如圖3例子所示。

上面我們講述了Lambda表達(dá)式的普遍用法,而實(shí)際上在Java編程中,Lambda表達(dá)式可以使用了最少的代碼量,實(shí)現(xiàn)了同樣的功能。圖4是使用匿名函數(shù)創(chuàng)建一個線程,而圖5是使用Lambda表達(dá)式實(shí)現(xiàn)的同樣功能的代碼,從這兩個例子中我們可以看到,應(yīng)用Lambda表達(dá)式進(jìn)行編程,可以讓代碼變得更加簡潔、緊湊,很大程度上提升了Java的語言表達(dá)能力。

在Java程序中,使用Lambda表達(dá)式的好處就是極大地簡化了代碼,縮減了代碼量,而且使程序邏輯也更加清晰明了。Lambda表達(dá)式一般適合于沒有復(fù)雜邏輯或者無副作用的純函數(shù)場景下,但是有的Lambda表達(dá)式會降低程序的可讀性,雖然代碼最大程度上簡潔緊湊,但是產(chǎn)生的副作用就是有時候會使代碼變得晦澀難懂。因此,雖然Lambda表達(dá)式最吸引人的地方是簡潔,但是在有多層函數(shù)嵌套的情況下,Lambda表達(dá)式的簡潔性并沒有很大的提升,反而影響了函數(shù)的作用范圍的識別度,這種情況下不建議使用Lambda表達(dá)式。

主站蜘蛛池模板: 9cao视频精品| Jizz国产色系免费| 美女啪啪无遮挡| 欧美中文字幕在线二区| 亚洲成人福利网站| 99re视频在线| 又粗又硬又大又爽免费视频播放| 欧美亚洲国产一区| 欧美国产日韩一区二区三区精品影视| 激情视频综合网| 欧美人与牲动交a欧美精品 | 在线免费观看a视频| 色噜噜狠狠狠综合曰曰曰| 丝袜高跟美脚国产1区| 亚洲欧美日韩成人高清在线一区| 欧日韩在线不卡视频| 亚洲黄色视频在线观看一区| 国产成人无码久久久久毛片| 精品国产乱码久久久久久一区二区| a欧美在线| 狠狠ⅴ日韩v欧美v天堂| 欧美激情视频二区| 欧洲欧美人成免费全部视频| 囯产av无码片毛片一级| 亚洲无码高清一区二区| 国产精品欧美激情| 日韩国产欧美精品在线| 国产毛片片精品天天看视频| 久久久噜噜噜久久中文字幕色伊伊| 亚洲天堂视频网站| 狠狠做深爱婷婷综合一区| 国产成年无码AⅤ片在线| 中文字幕伦视频| 成人福利在线看| 中文字幕佐山爱一区二区免费| 91av成人日本不卡三区| 国产主播福利在线观看| 婷婷亚洲综合五月天在线| 国产va在线观看免费| 成年人久久黄色网站| 日韩无码视频专区| 免费看a毛片| 国产精品第一区| www.99精品视频在线播放| 在线国产资源| 亚洲91在线精品| 亚洲综合香蕉| 在线观看亚洲精品福利片| 久久久久国产精品免费免费不卡| 免费亚洲成人| 亚洲精品无码不卡在线播放| 91福利国产成人精品导航| 91免费国产高清观看| 国产精品福利在线观看无码卡| 欧美在线三级| 亚洲日本中文综合在线| 这里只有精品国产| 青青青视频免费一区二区| 欧美国产三级| 91麻豆精品视频| 亚洲国产成人精品无码区性色| 中文字幕人成乱码熟女免费| 在线观看亚洲人成网站| 久久久久亚洲av成人网人人软件| 亚洲人成人无码www| 精品国产成人a在线观看| 国产国模一区二区三区四区| 蝴蝶伊人久久中文娱乐网| 亚洲第一成年人网站| 国产精品一区二区无码免费看片| 亚洲精品无码久久毛片波多野吉| 国产精品视频999| 日本免费a视频| 日韩专区第一页| 91精品国产一区自在线拍| 波多野结衣AV无码久久一区| 热re99久久精品国99热| 国产成人一区二区| 日韩福利在线视频| 在线不卡免费视频| 亚洲国产高清精品线久久| 88av在线看|