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

您的位置:首頁技術文章
文章詳情頁

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

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

lambda表達式是Java8提供的新特性之一,也可以稱之為閉包;它支持Java能夠進行簡單的函數式編程,也就是說可以把一個匿名函數作為一個方法的參數進行傳遞;其格式分為三部分,第一部分為入參列表,第二部由->固定組成,第三部分為方法體;

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

// 運行結果thread running

2. lambda表達式的重要特征

可選的參數類型聲明:不需要聲明參數的類型,編譯器可以統一識別參數值;

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((Integer a) -> { System.out.println('a: ' + a);});// 不聲明參數類型System.out.println('不聲明參數類型');lambdaTest.print((a) -> { System.out.println('a: ' + a);}); }}interface LambdaInterface { void print(Integer a);}

// 運行結果聲明參數類型a: 123不聲明參數類型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);}

// 運行結果定義參數圓括號a: 123一個參數可不定義參數圓括號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);}

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

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

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);// 聲明返回關鍵字System.out.println('聲明返回關鍵字');Integer s1 = lambdaTest.sum((Integer a, Integer b) -> { return a + b;});System.out.println(s1);// 一個表達式返回值語句可不聲明返回關鍵字System.out.println('一個表達式返回值語句可不聲明返回關鍵字');Integer s2 = lambdaTest.sum((a, b) -> a + b);System.out.println(s2); }}interface LambdaInterface { Integer calculate(Integer a, Integer b);}

// 運行結果聲明返回關鍵字579一個表達式返回值語句可不聲明返回關鍵字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) -> { // 修改域外局部變量將出現編譯錯誤 c = 222; return a + b;});System.out.println(s1);int d = 333;Integer s2 = lambdaTest.sum((a, b) -> { // 域外修改lambda表達式內部使用過的域外局部變量也將導致編譯錯誤 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) -> { // 沒有出現編譯錯誤 lambdaTest.c = 999; return a + b + lambdaTest.c;});System.out.println(s1); }}interface LambdaInterface { Integer calculate(Integer a, Integer b);}

// 運行結果1578

4. lambda表達式的優缺點

優點:

1.使代碼更加簡潔;

2.減少匿名內部類的創建,節省資源;

缺點:

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

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

5. lambda表達式的使用場景

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

使用實現Runnable接口創建線程

使用實現Callable接口創建FutureTask

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

6. lambda表達式的實現原理

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

// 對上面的LambdaTest.java編譯后的LambdaTest.class文件使用javap -p進行查看將會得到如下結果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);}

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

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩午夜精品| 一区二区视频欧美| 亚洲高清激情| 欧美三区四区| 黑森林国产精品av| av日韩中文| 久久激情中文| 亚洲精品99| 日韩在线一区二区| 日韩激情啪啪| 久久gogo国模啪啪裸体| 麻豆久久久久久| 国产欧美日韩| 日韩深夜视频| 亚洲欧美视频| 欧美精品福利| 久久久久国产精品一区三寸| 欧美不卡高清一区二区三区| 久久九九国产| 亚洲欧美在线专区| 国产一区二区三区亚洲综合| 人在线成免费视频| 日韩一区二区久久| 911亚洲精品| 久久久久亚洲| 青青草91久久久久久久久| 精品网站999| 国产伦久视频在线观看| 久久xxxx| 国产精品多人| 99re国产精品| 精品国产乱码久久久久久樱花| 成人av动漫在线观看| 国产精品久久久久久久久免费高清 | 日本午夜精品一区二区三区电影| 久久大逼视频| 亚洲欧洲免费| 中文在线中文资源| 日韩欧美在线精品| 成人在线免费观看91| 蜜桃一区二区三区在线| 日韩高清欧美| 久久wwww| 日本午夜精品一区二区三区电影 | 亚洲三级精品| 大香伊人久久精品一区二区| 免播放器亚洲| 欧美日韩高清| 日韩av福利| 91亚洲国产| 国产精品草草| 国产精品一页| 青青草视频一区| 99综合视频| 99精品电影| 日韩中文首页| 国产精品久久久久久久久久10秀 | 不卡中文字幕| 99精品国产一区二区三区| 欧美国产视频| 国产精品自在| 久久99久久久精品欧美| 91九色综合| 免费成人性网站| 亚洲在线成人| 免费一区二区视频| 亚洲精品国产精品粉嫩| 日本欧美在线看| 免费在线欧美视频| 亚洲一级大片| 亚洲制服欧美另类| 天堂va欧美ⅴa亚洲va一国产| 丝袜美腿一区二区三区| 在线观看一区| 欧美视频久久| 久久av网站| 日韩在线欧美| 黄页网站一区| 日韩在线黄色| 欧美片第1页综合| 精品欧美视频| 色偷偷色偷偷色偷偷在线视频| 桃色一区二区| 亚洲一区二区免费在线观看| 亚洲ww精品| 国产精品www994| 九九精品调教| 日韩一区二区三区精品视频第3页| 国产精品香蕉| 国产二区精品| 日韩精品一区二区三区中文 | 中文字幕一区二区精品区| 欧美在线看片| 999精品一区| 国产欧美日韩一区二区三区四区| 老牛国内精品亚洲成av人片| 成人日韩在线观看| 日韩av网站免费在线| 日韩在线观看| 日韩高清不卡在线| 日本美女一区| 亚洲青青久久| 欧美午夜精品一区二区三区电影| 日韩精品欧美大片| 亚洲va在线| 久久99偷拍| 亚洲午夜久久| 久久视频国产| 国内揄拍国内精品久久| 亚洲精品护士| 日韩黄色大片| 国产精品一二| 亚洲一区二区小说| 国产成人精品亚洲日本在线观看| 欧美视频二区| 亚洲欧美日韩专区| 日韩精品欧美| 在线观看精品| 久久男人天堂| 国产精品久久久久9999高清| 久久国产免费看| 日韩1区2区3区| 一区二区三区四区在线观看国产日韩| 久久精品免费一区二区三区| 精品精品99| 国产精品**亚洲精品| 日韩av中文字幕一区二区| 蜜桃视频一区二区| 美女黄网久久| 国产激情一区| 久久中文字幕一区二区三区| 国产欧美欧美| 精品伊人久久| 日韩88av| 久久一级电影| 热久久久久久久| 一本综合精品| 亚洲精品美女91| 69堂精品视频在线播放| 日韩不卡一二三区| 亚洲三级网站| 国产日韩三级| 91一区二区| 日韩在线不卡| 中文日韩欧美| 亚洲日本三级| 国产精品久av福利在线观看| 国产精品日本一区二区不卡视频 | 精品国产aⅴ| 鲁鲁在线中文| 久久亚洲影院| 91精品国产自产在线观看永久∴| 亚洲韩日在线| 日韩不卡一区二区三区| 国产91欧美| 欧美日韩国产探花| 日韩欧美精品一区二区综合视频| 国产日韩在线观看视频| 国产日韩欧美三区| 91精品蜜臀一区二区三区在线 | 日本不卡不码高清免费观看| 欧美国产另类| 在线视频精品| 精品一区二区三区免费看 | 欧美日韩国产高清| 国产精品免费99久久久| 不卡一区综合视频| 国产乱码精品一区二区三区亚洲人 | 久久av导航| 在线亚洲成人| 丁香婷婷久久| 亚洲五月综合| 国产v综合v| 国产精品一站二站| 美女久久网站| 99久久视频| 国产一区二区久久久久| 日韩视频1区| 亚洲一区国产一区| 97se综合| 日韩欧美一区二区三区在线视频 | 日韩精品91| 国产一区二区三区天码| 日韩中文字幕一区二区三区| 亚洲www啪成人一区二区| 国产精品videossex久久发布| 日韩中文字幕亚洲一区二区va在线| 99久久精品国产亚洲精品| 国产91在线精品| 精品久久在线| 牛牛精品成人免费视频| 国产欧美一区二区三区米奇 | 九一国产精品| 日韩一区三区| av高清一区| 丝袜av一区| 香蕉人人精品| 亚洲一级高清| 影院欧美亚洲| 日韩在线a电影|