亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

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

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

瀏覽:57日期: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)部使用過的域外局部變量也將導致編譯錯誤 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表達式會編譯成一個對應的靜態(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)!

標簽: Java
相關(guān)文章:
主站蜘蛛池模板: 久久久久国产成人精品亚洲午夜 | 免费大片黄在线观看 | 羞羞答答免费人成黄页在线观看国产 | 黄色a三级三级三级免费看 黄色a三级免费看 | 免费看的黄色录像 | 亚洲一区二区三区四区在线 | 久久久受www免费人成 | 手机看片日韩高清国产欧美 | 欧美第一精品 | 亚洲欧美色图 | 天天影视色香欲综合免费 | 噜噜噜在线视频 | 亚洲免费大全 | 二级特黄绝大片免费视频大片 | 亚洲欧美偷拍自拍 | 国产在线精品福利91香蕉 | 成人伊人亚洲人综合网站222 | 欧美国产日韩精品 | 亚洲国产一区二区三区四区五区 | 久久久久毛片成人精品 | 久久久亚洲 | 一级做一级爱a做片性视频视频 | 香蕉久久精品国产 | 羞羞答答91麻豆网站入口 | 久久精品这里是免费国产 | 久久五月视频 | 日韩一级黄色影片 | 台湾永久内衣秀 | 91在线播放免费不卡无毒 | 国产成人在线播放 | 91视频三级| 国产高清网站 | 久草视频在线免费看 | 爱干tv| 久久精品国内一区二区三区 | 精品一区二区三区视频 | 99精品网站 | a级毛片高清免费视频 | 久久精品国产线看观看亚洲 | 一区二区在线不卡 | 一区二区三区免费精品视频 |