Lambda表达式

函数式思想

尽量忽略面向对象的复杂语法,强调做什么,而不是以什么形式去做。

Lambda表达式

就是函数是思想的体现


案例1
这是一段多线程要执行的内容:

public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("今天晚上真冷啊");
}
}

这是测试类:

public class Demo {
public static void main(String[] args) {
MyRunnable mr = new MyRunnable();
Thread t = new Thread(mr);
t.start();
}
}

运行结果:

今天晚上真冷啊

案例2
测试类(匿名内部类方式):

public class Demo {
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("今天真饿啊");
}
}).start();
}
}

运行结果:

今天真饿啊

案例3
测试类(匿名内部类Lambda表达式写法):

public class Demo {
public static void main(String[] args) {
new Thread(()->{
System.out.println("今天要洗澡");
}).start();
}
}

运行结果:

今天要洗澡

Lambda表达式三要素

组成Lambda表达式的三要素:形式参数箭头代码块

  • () 里面没有内容,可以看成方法形式参数为空
  • -> 指向要做的事情
  • {} 要执行的代码

格式

格式:(形式参数) -> {代码块}

  • 形式参数:如果有多个形式参数,参数之间用逗号隔开;如果没有就空着

使用前提

Lambda表达式的使用前提

  • 有一个接口
  • 接口中有,且只有一个抽象方法
  • 必须有上下文环境,才能推导出Lambda表达式对应的接口

Lambda表达式的省略

  • 只有一个形式参数时,参数类型可以省略;()也可以省略
  • 参数类型可以省略,但多个参数时,不能只省略某一个
  • 如果{}中只有一条不带return的语句时,句末的分号和{}都可以省略
  • 如果{}中只有一条带return的语句时,句末的分号和{}都可以省 略,return也可以省略

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

  1. 所需类型不同
  • 匿名内部类:可以是接口,也可以是抽象类,还可以是具体类
  • Lambda表达式:只能是接口
  1. 使用限制不同
  • 如果接口中有且只有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类
  • 如果接口中多于一个抽象方法,只能使用匿名内部类,不能使用Lambda表达式
  1. 实现原理不同
  • 匿名内部类编译之后,产生一个单独的.class字节码文件
  • Lambda表达式编译之后,没有一个单独的.class字节码文件。对应的字节码会在运行的时候动态生成

__EOF__

本文作者茶碗儿
本文链接https://www.cnblogs.com/chawaner/p/17005530.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   茶碗儿  阅读(147)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击这里跳转到-->【茶碗儿CSDN】
点击右上角即可分享
微信分享提示