Java Lambda

一、格式解读

方式1的代码启动线程输出,方式2以匿名内部类改进,方式3以Lambda表达式的方式改进,让代码更优雅。
在这里插入图片描述

1.Lambda的标准格式

匿名内部类中重写run()方法代码解析——红框部分:方法形式参数为空,不需要传递参数;方法返回值类型为viod,无返回值;方法体中的内容是具体要做的事情。
在这里插入图片描述
Lambda表达式的代码解析:
():里面没有内容,可看为方法形式参数为空;
->:用箭头指向后面要做的事情;
{}:代码块,可看为方法体中的内容;
组成三要素:形式参数、箭头、代码块。
在这里插入图片描述
格式:( 形式参数 ) -> { 代码块 },如多个参数,用逗号隔开,无参数则留空。

二、Lambda表达式之抽象方法

1. 无参无返回值

使用前提:
1:有一个接口
2:接口中有且仅有一个抽象方法

方式一:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
方式二:
在这里插入图片描述
方式三:
在这里插入图片描述

2. 带参无返回值

方式一:
在这里插入图片描述
在这里插入图片描述
方式二:
在这里插入图片描述

3. 带参带返回值

在这里插入图片描述
在这里插入图片描述

三、Lambda表达式的省略模式

1. 形式参数的类型书写可省略。

在这里插入图片描述

2. 参数有且仅有一个,小括号可省略。

在这里插入图片描述

3. 代码块中语句只有一条,大括号和分号可省略。

在这里插入图片描述
在这里插入图片描述

四、注意事项

在这里插入图片描述
1.大括号和分号可省略,并要求有接口,且接口有且仅有一个抽象方法
在这里插入图片描述
2.使用Lambda表达式,必须有上下文环境,才能推导出Lambda对应的接口。
单独写程序不认识,因为没有上下文环境。

在这里插入图片描述
可赋值给一个接口,它可根据局部变量的类型来推导Lambda表达式对应的接口。
在这里插入图片描述
它根据构造方法的参数来推断得知Lambda表达式对应的接口。
在这里插入图片描述
在这里插入图片描述

五、Lambda表达式和匿名内部类的区别

前景提要:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

区别一:

匿名内部类的形式可以实现方法参数为接口的调用。
匿名内部类的形式可以实现方法参数为抽象类的调用。
匿名内部类的形式可以实现方法参数为具体类的调用。在这里插入图片描述
Lambda表达式可以实现方法参数为接口的调用。
Lambda表达式不可以实现方法参数为抽象类的调用。
Lambda表达式不可以实现方法参数为具体类的调用。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

区别二:

在这里插入图片描述
接口中有且仅有一个抽象方法,可以使用匿名内部类或Lambda表达式。
在这里插入图片描述
接口中有两个及其以上的方法,可以使用匿名内部类,但是不能使用Lambda表达式。
在这里插入图片描述

区别三:

实现原理不同:(查看字节码文件)
Lambda: 没有更多的字节码文件生成。
在这里插入图片描述
在这里插入图片描述
匿名内部类: 多了一个字节码文件。
在这里插入图片描述
在这里插入图片描述
匿名内部类:会产生单独的字节码文件,Lambda:不会产生单独的字节码文件(运行时动态生成)。
—————————————————————————————————————————
总结:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值