1. Lambda表达式强调函数式编程思想:“强调做什么,而不是以什么形式去做”;格式如下:
(形式参数) -> {代码块}
2. 使用Lambda必须要有接口,并且要求接口中有且只有一个抽象方法。
3. 使用Lambda必须有上下文环境,才能推导出Lambda对应的接口。
() -> System.out.println("Lambda");//直接写,错误,无上下文环境就没意义 Runnable r = () -> System.out.println("Lambda");//赋值给一个接口,正确,有上下文 new Thread(r).start();
new Thread(()-> System.out.println("Lambda")).start();//作为调用方法参数传入,也可以
4. Lambda表达式和匿名内部类的区别
(1)所需类型不同
- 匿名内部类:可以是接口,抽象类,也可以是具体类
- Lambda表达式:只能是接口
(2)使用限制不同
- 接口中只有一个抽象方法,可以用Lambda表达式也可以使用匿名内部类
- 接口中有多个抽象方法,只能用匿名内部类(重写多个抽象方法)
(3)实现原理不同
- 匿名内部类:编译之后,产生一个单独的.class字节码文件
- Lambda表达式:编译后不会有多余的字节码文件,对应的字节码文件在运行时动态生成