日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Java8新特性之Lambda表達式的使用

瀏覽:123日期:2022-08-14 11:44:47
1. lambda表達式介紹

lambda表達式是Java8提供的新特性之一,也可以稱之為閉包;它支持Java能夠進行簡單的函數(shù)式編程,也就是說可以把一個匿名函數(shù)作為一個方法的參數(shù)進行傳遞;其格式分為三部分,第一部分為入?yún)⒘斜恚诙坑?>固定組成,第三部分為方法體;

public class LambdaTest { public static void main(String[] args) {// 使用lambda表達式創(chuàng)建線程Thread thread = new Thread(() -> { System.out.println('thread running');});thread.start(); }}

// 運行結(jié)果thread running

2. lambda表達式的重要特征

可選的參數(shù)類型聲明:不需要聲明參數(shù)的類型,編譯器可以統(tǒng)一識別參數(shù)值;

public class LambdaTest { private Integer a; public LambdaTest(Integer a) {this.a = a; } public void print(LambdaInterface lambdaInterface) {lambdaInterface.print(this.a); } public static void main(String[] args) {LambdaTest lambdaTest = new LambdaTest(123);// 聲明參數(shù)類型System.out.println('聲明參數(shù)類型');lambdaTest.print((Integer a) -> { System.out.println('a: ' + a);});// 不聲明參數(shù)類型System.out.println('不聲明參數(shù)類型');lambdaTest.print((a) -> { System.out.println('a: ' + a);}); }}interface LambdaInterface { void print(Integer a);}

// 運行結(jié)果聲明參數(shù)類型a: 123不聲明參數(shù)類型a: 123

可選的參數(shù)圓括號:一個參數(shù)時不需要定義圓括號,但沒有參數(shù)或者多個參數(shù)時則必須要定義;

public class LambdaTest { private Integer a; public LambdaTest(Integer a) {this.a = a; } public void print(LambdaInterface lambdaInterface) {lambdaInterface.print(this.a); } public static void main(String[] args) {LambdaTest lambdaTest = new LambdaTest(123);// 定義參數(shù)圓括號System.out.println('定義參數(shù)圓括號');lambdaTest.print((a) -> { System.out.println('a: ' + a);});// 一個參數(shù)可不定義參數(shù)圓括號System.out.println('一個參數(shù)可不定義參數(shù)圓括號');lambdaTest.print(a -> { System.out.println('a: ' + a);}); }}interface LambdaInterface { void print(Integer a);}

// 運行結(jié)果定義參數(shù)圓括號a: 123一個參數(shù)可不定義參數(shù)圓括號a: 123

可選的大括號:如果方法體僅有一個語句,可不需要使用大括號;

public class LambdaTest { private Integer a; public LambdaTest(Integer a) {this.a = a; } public void print(LambdaInterface lambdaInterface) {lambdaInterface.print(this.a); } public static void main(String[] args) {LambdaTest lambdaTest = new LambdaTest(123);// 使用方法體大括號System.out.println('使用方法體大括號');lambdaTest.print(a -> { System.out.println('a: ' + a);});// 一個語句可不使用方法體大括號System.out.println('一個語句可不使用方法體大括號');lambdaTest.print(a -> System.out.println('a: ' + a)); }}interface LambdaInterface { void print(Integer a);}

// 運行結(jié)果使用方法體大括號a: 123一個語句可不使用方法體大括號a: 123

可選的返回關(guān)鍵字:如果方法體僅有一個表達式返回值語句,可不需要聲明返回關(guān)鍵字,但存在大括號時則必須聲明;

public class LambdaTest { private Integer a; private Integer b; public LambdaTest(Integer a, Integer b) {this.a = a;this.b = b; } public Integer sum(LambdaInterface lambdaInterface) {return lambdaInterface.calculate(this.a, this.b); } public static void main(String[] args) {LambdaTest lambdaTest = new LambdaTest(123, 456);// 聲明返回關(guān)鍵字System.out.println('聲明返回關(guān)鍵字');Integer s1 = lambdaTest.sum((Integer a, Integer b) -> { return a + b;});System.out.println(s1);// 一個表達式返回值語句可不聲明返回關(guān)鍵字System.out.println('一個表達式返回值語句可不聲明返回關(guān)鍵字');Integer s2 = lambdaTest.sum((a, b) -> a + b);System.out.println(s2); }}interface LambdaInterface { Integer calculate(Integer a, Integer b);}

// 運行結(jié)果聲明返回關(guān)鍵字579一個表達式返回值語句可不聲明返回關(guān)鍵字579

3. lambda表達式對域外變量的限制

lambda表達式對域外的局部變量具有隱性final語義的限制,但對成員變量沒有該限制;

public class LambdaTest { private Integer a; private Integer b; public LambdaTest(Integer a, Integer b) {this.a = a;this.b = b; } public Integer sum(LambdaInterface lambdaInterface) {return lambdaInterface.calculate(this.a, this.b); } public static void main(String[] args) {LambdaTest lambdaTest = new LambdaTest(123, 456);int c = 111;Integer s1 = lambdaTest.sum((a, b) -> { // 修改域外局部變量將出現(xiàn)編譯錯誤 c = 222; return a + b;});System.out.println(s1);int d = 333;Integer s2 = lambdaTest.sum((a, b) -> { // 域外修改lambda表達式內(nèi)部使用過的域外局部變量也將導(dǎo)致編譯錯誤 return a + b + d;});d = 444;System.out.println(s2); }}interface LambdaInterface { Integer calculate(Integer a, Integer b);}

public class LambdaTest { private Integer a; private Integer b; private Integer c; public LambdaTest(Integer a, Integer b, Integer c) {this.a = a;this.b = b;this.c = c; } public Integer sum(LambdaInterface lambdaInterface) {return lambdaInterface.calculate(this.a, this.b); } public static void main(String[] args) {LambdaTest lambdaTest = new LambdaTest(123, 456, 789);Integer s1 = lambdaTest.sum((a, b) -> { // 沒有出現(xiàn)編譯錯誤 lambdaTest.c = 999; return a + b + lambdaTest.c;});System.out.println(s1); }}interface LambdaInterface { Integer calculate(Integer a, Integer b);}

// 運行結(jié)果1578

4. lambda表達式的優(yōu)缺點

優(yōu)點:

1.使代碼更加簡潔;

2.減少匿名內(nèi)部類的創(chuàng)建,節(jié)省資源;

缺點:

1.可維護性差,必須熟悉抽象方法的參數(shù)列表;

2.可讀性差,必須對lambda表達式有一定深入;

5. lambda表達式的使用場景

在聲明方法時,方法的形參列表包含一個或者多個函數(shù)式接口就可以使用lambda表達式;如:

使用實現(xiàn)Runnable接口創(chuàng)建線程

使用實現(xiàn)Callable接口創(chuàng)建FutureTask

使用四大函數(shù)式接口消費者接口Consumer、提供者接口Supplier、斷言型接口Predicate、函數(shù)型接口Function

6. lambda表達式的實現(xiàn)原理

lambda表達式是通過特定的語法,讓編譯器對java文件進行編譯時,針對每一個lambda表達式會編譯成一個對應(yīng)的靜態(tài)方法,由此也可證明lambda表達式并不是一種語法糖;

// 對上面的LambdaTest.java編譯后的LambdaTest.class文件使用javap -p進行查看將會得到如下結(jié)果javap -p LambdaTest.classCompiled from 'LambdaTest.java'public class cn.jackiegu.java8.study.lambda.LambdaTest { private java.lang.Integer a; private java.lang.Integer b; private java.lang.Integer c; public cn.jackiegu.java8.study.lambda.LambdaTest(java.lang.Integer, java.lang.Integer, java.lang.Integer); public java.lang.Integer sum(cn.jackiegu.java8.study.lambda.LambdaInterface); public static void main(java.lang.String[]); private static java.lang.Integer lambda$main$0(cn.jackiegu.java8.study.lambda.LambdaTest, java.lang.Integer, java.lang.Integer);}

到此這篇關(guān)于Java8新特性之Lambda表達式的使用的文章就介紹到這了,更多相關(guān)java的Lambda表達式內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产白浆在线免费观看| 国产精品亚洲片在线播放| 国产成人黄色| 国产一区二区视频在线看| 日韩高清国产一区在线| 奇米色欧美一区二区三区| 日精品一区二区三区| 日韩欧美激情电影| 国产精品主播在线观看| 精品国产中文字幕第一页| 国产精品99在线观看| 午夜欧美巨大性欧美巨大| 天堂资源在线亚洲| 亚洲欧美网站| 日本欧美大码aⅴ在线播放| 国产欧美精品久久| 国产成人精品三级高清久久91| 亚洲精品88| 日韩一级不卡| 蜜桃av一区二区在线观看| 亚洲美女91| 麻豆一区二区在线| а√在线中文在线新版| 久久一区二区中文字幕| 中文精品视频| 久久精品999| 97精品97| 亚洲作爱视频| 国产免费av一区二区三区| 成人在线免费观看网站| 夜夜嗨av一区二区三区网站四季av| 亚洲开心激情| 精品国产不卡| 久久五月天小说| 99国产精品| 国产精品伊人| 99精品美女| 亚洲精品影视| 久久久久久一区二区| 99国产精品99久久久久久粉嫩| 日本伊人久久| 伊人久久视频| 香蕉久久久久久久av网站| 国产一卡不卡| 精品国模一区二区三区| 国产模特精品视频久久久久| 欧美精品中文字幕亚洲专区| 在线天堂中文资源最新版| 国产麻豆综合| 免费在线亚洲欧美| 亚洲精华国产欧美| 国产精品午夜一区二区三区| 91精品久久久久久久久久不卡| 日韩精品亚洲专区| 丝袜美腿诱惑一区二区三区| 亚洲最新av| 久久久久久色 | 日本欧美韩国一区三区| 日韩国产欧美| 日本麻豆一区二区三区视频| 美女国产一区二区三区| 香蕉久久久久久久av网站| 视频在线不卡免费观看| 日本一区二区三区视频在线看| 日韩大片免费观看| 日本不卡视频在线观看 | 亚洲色图国产| 黄色精品视频| 日本中文字幕视频一区| 国产综合欧美| 麻豆国产欧美日韩综合精品二区| 99日韩精品| 97精品国产一区二区三区| 日韩一区二区三区在线看| 91精品一区二区三区综合| 国产欧美大片| 亚洲综合图色| 激情欧美日韩一区| 精品久久免费| 日韩精品a在线观看91| 91精品福利| 国产精品二区不卡| 蜜桃视频第一区免费观看| 99久久亚洲精品蜜臀| 久久一区国产| 日韩不卡一二三区| 国产精品美女久久久浪潮软件| 中文字幕色婷婷在线视频| 91亚洲精品视频在线观看| 亚洲激情黄色| 精品成人免费一区二区在线播放| 国产欧美高清视频在线| 亚州国产精品| 亚洲综合二区| 久久精品国产大片免费观看| 国产精品成久久久久| 国产精品一区二区av日韩在线| 在线国产一区| 欧美天堂视频| 国产成人久久精品一区二区三区| 欧美亚洲专区| 亚洲ab电影| 蜜桃久久av| 伊人久久亚洲美女图片| 桃色一区二区| 激情黄产视频在线免费观看| 欧美激情亚洲| 久久不见久久见中文字幕免费| 日韩中文字幕视频网| 亚洲午夜国产成人| 久久午夜精品| 日韩在线卡一卡二| 午夜精品一区二区三区国产| 日韩精品一区二区三区免费观看| 中文字幕色婷婷在线视频| 国产一区二区三区四区五区传媒| 麻豆精品在线视频| 精品国产中文字幕第一页| 欧美精品成人| 麻豆视频观看网址久久| 久久精品日韩欧美| 精品一区二区三区中文字幕| 国产精品久久国产愉拍| 国产精品.xx视频.xxtv| 欧美精品二区| 电影91久久久| 日韩在线看片| 成人看片网站| 亚洲视频综合| 91成人精品视频| 午夜一级久久| 日本一区二区三区中文字幕| 日本v片在线高清不卡在线观看| 美女精品在线观看| 蜜桃视频在线观看一区| 亚洲最新av| 久久国产精品免费一区二区三区| 国产精品欧美在线观看| 国产精品亚洲片在线播放| 你懂的亚洲视频| 国内不卡的一区二区三区中文字幕| 成人美女视频| 久久精品国产99久久| 久久高清国产| 欧美日韩调教| 成年男女免费视频网站不卡| 欧美aa在线观看| 91精品国产福利在线观看麻豆| 精品在线91| 一区二区三区网站| 久久国产三级精品| 精品国产99| 91精品一区国产高清在线gif | 中文字幕亚洲精品乱码| 日本91福利区| 国产精品手机在线播放| 日韩av免费大片| 欧美一区二区性| 国产精品美女久久久浪潮软件| 亚洲精品在线a| 国产精品chinese| 欧美丰满日韩| 在线看片不卡| 日韩精品成人在线观看| 国产一区二区三区天码| 韩日一区二区三区| 欧美三级第一页| 精品网站999| 九九综合九九| 欧美亚洲人成在线| 久久青青视频| 三级亚洲高清视频| 国产美女久久| 欧美日韩在线播放视频| 日本在线成人| 久久久国产精品一区二区中文| 男人的天堂久久精品| 国产精品传媒麻豆hd| 久久精品卡一| 日韩精品亚洲专区| 欧美香蕉视频| 日韩动漫一区| 91亚洲成人| 日韩中文一区二区| 午夜久久中文| 日韩精品午夜视频| 久久精品免费一区二区三区| 日本va欧美va瓶| 久久久久蜜桃| 国产精品一区二区av交换| 欧美日韩国产一区二区三区不卡| 91综合久久爱com| 久久婷婷丁香| 欧美日本二区| 亚洲精品va| 成人一二三区| 人人爱人人干婷婷丁香亚洲| av资源亚洲| 日韩福利在线观看| 图片区亚洲欧美小说区|