电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

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

Java8新特性之Lambda表達(dá)式的使用

瀏覽:60日期:2022-08-14 11:44:47
1. lambda表達(dá)式介紹

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

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

// 運(yùn)行結(jié)果thread running

2. lambda表達(dá)式的重要特征

可選的參數(shù)類型聲明:不需要聲明參數(shù)的類型,編譯器可以統(tǒng)一識(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((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);}

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

可選的參數(shù)圓括號(hào):一個(gè)參數(shù)時(shí)不需要定義圓括號(hào),但沒有參數(shù)或者多個(gè)參數(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ù)圓括號(hào)System.out.println('定義參數(shù)圓括號(hào)');lambdaTest.print((a) -> { System.out.println('a: ' + a);});// 一個(gè)參數(shù)可不定義參數(shù)圓括號(hào)System.out.println('一個(gè)參數(shù)可不定義參數(shù)圓括號(hào)');lambdaTest.print(a -> { System.out.println('a: ' + a);}); }}interface LambdaInterface { void print(Integer a);}

// 運(yùn)行結(jié)果定義參數(shù)圓括號(hào)a: 123一個(gè)參數(shù)可不定義參數(shù)圓括號(hào)a: 123

可選的大括號(hào):如果方法體僅有一個(gè)語句,可不需要使用大括號(hào);

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);// 使用方法體大括號(hào)System.out.println('使用方法體大括號(hào)');lambdaTest.print(a -> { System.out.println('a: ' + a);});// 一個(gè)語句可不使用方法體大括號(hào)System.out.println('一個(gè)語句可不使用方法體大括號(hào)');lambdaTest.print(a -> System.out.println('a: ' + a)); }}interface LambdaInterface { void print(Integer a);}

// 運(yùn)行結(jié)果使用方法體大括號(hào)a: 123一個(gè)語句可不使用方法體大括號(hào)a: 123

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

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

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

3. lambda表達(dá)式對(duì)域外變量的限制

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

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)編譯錯(cuò)誤 c = 222; return a + b;});System.out.println(s1);int d = 333;Integer s2 = lambdaTest.sum((a, b) -> { // 域外修改lambda表達(dá)式內(nèi)部使用過的域外局部變量也將導(dǎo)致編譯錯(cuò)誤 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)編譯錯(cuò)誤 lambdaTest.c = 999; return a + b + lambdaTest.c;});System.out.println(s1); }}interface LambdaInterface { Integer calculate(Integer a, Integer b);}

// 運(yùn)行結(jié)果1578

4. lambda表達(dá)式的優(yōu)缺點(diǎn)

優(yōu)點(diǎn):

1.使代碼更加簡潔;

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

缺點(diǎn):

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

2.可讀性差,必須對(duì)lambda表達(dá)式有一定深入;

5. lambda表達(dá)式的使用場景

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

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

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

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

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

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

// 對(duì)上面的LambdaTest.java編譯后的LambdaTest.class文件使用javap -p進(jìn)行查看將會(huì)得到如下結(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表達(dá)式的使用的文章就介紹到這了,更多相關(guān)java的Lambda表達(dá)式內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 压装机-卧式轴承轮轴数控伺服压装机厂家[铭泽机械] | 强效碱性清洗剂-实验室中性清洗剂-食品级高纯氮气发生器-上海润榕科学器材有限公司 | 车辆定位管理系统_汽车GPS系统_车载北斗系统 - 朗致物联 | 北京普辉律师事务所官网_北京律师24小时免费咨询|法律咨询 | 密集柜_档案密集柜_智能密集架_密集柜厂家_密集架价格-智英伟业 密集架-密集柜厂家-智能档案密集架-自动选层柜订做-河北风顺金属制品有限公司 | 选矿设备,选矿生产线,选矿工艺,选矿技术-昆明昆重矿山机械 | 机制砂选粉机_砂石选粉机厂家-盐城市助成粉磨科技有限公司 | 数显恒温培养摇床-卧式/台式恒温培养摇床|朗越仪器 | 浙江自考_浙江自学考试网 | 蒸压釜-陶粒板隔墙板蒸压釜-山东鑫泰鑫智能装备有限公司 | 防水接头-电缆防水接头-金属-电缆密封接头-不锈钢电缆接头 | 集菌仪_智能集菌仪_全封闭集菌仪_无菌检查集菌仪厂家-那艾 | 软瓷_柔性面砖_软瓷砖_柔性石材_MCM软瓷厂家_湖北博悦佳软瓷 | 合景一建-无尘车间设计施工_食品医药洁净车间工程装修总承包公司 | 合肥仿石砖_合肥pc砖厂家_合肥PC仿石砖_安徽旭坤建材有限公司 | PCB设计,PCB抄板,电路板打样,PCBA加工-深圳市宏力捷电子有限公司 | 厂房出租-厂房规划-食品技术-厂房设计-厂房装修-建筑施工-设备供应-设备求购-龙爪豆食品行业平台 | 螺旋绞龙叶片,螺旋输送机厂家,山东螺旋输送机-淄博长江机械制造有限公司 | 精准猎取科技资讯,高效阅读科技新闻_科技猎 | 欧盟ce检测认证_reach检测报告_第三方检测中心-深圳市威腾检验技术有限公司 | 广州中央空调回收,二手中央空调回收,旧空调回收,制冷设备回收,冷气机组回收公司-广州益夫制冷设备回收公司 | 球磨机,节能球磨机价格,水泥球磨机厂家,粉煤灰球磨机-吉宏机械制造有限公司 | 轴承振动测量仪电箱-轴承测振动仪器-测试仪厂家-杭州居易电气 | 便携式高压氧舱-微压氧舱-核生化洗消系统-公众洗消站-洗消帐篷-北京利盟救援 | 天长市晶耀仪表有限公司 | 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | 金属清洗剂,防锈油,切削液,磨削液-青岛朗力防锈材料有限公司 | 招商帮-一站式网络营销服务|搜索营销推广|信息流推广|短视视频营销推广|互联网整合营销|网络推广代运营|招商帮企业招商好帮手 | 珠光砂保温板-一体化保温板-有釉面发泡陶瓷保温板-杭州一体化建筑材料 | 专业深孔加工_东莞深孔钻加工_东莞深孔钻_东莞深孔加工_模具深孔钻加工厂-东莞市超耀实业有限公司 | 浙江浩盛阀门有限公司| 整车VOC采样环境舱-甲醛VOC预处理舱-多舱法VOC检测环境仓-上海科绿特科技仪器有限公司 | 珠海白蚁防治_珠海灭鼠_珠海杀虫灭鼠_珠海灭蟑螂_珠海酒店消杀_珠海工厂杀虫灭鼠_立净虫控防治服务有限公司 | 原色会计-合肥注册公司_合肥代理记账公司_营业执照代办 | 无纺布包装机|径向缠绕包装机|缠绕膜打包机-上海晏陵智能设备有限公司 | 学叉车培训|叉车证报名|叉车查询|叉车证怎么考-工程机械培训网 | 空调风机,低噪声离心式通风机,不锈钢防爆风机,前倾皮带传动风机,后倾空调风机-山东捷风风机有限公司 | 低气压试验箱_高低温低气压试验箱_低气压实验箱 |林频试验设备品牌 | 嘉兴恒升声级计-湖南衡仪声级计-杭州爱华多功能声级计-上海邦沃仪器设备有限公司 | 网站建设,北京网站建设,北京网站建设公司,网站系统开发,北京网站制作公司,响应式网站,做网站公司,海淀做网站,朝阳做网站,昌平做网站,建站公司 | 开云(中国)Kaiyun·官方网站 - 登录入口 |