Lambda表达式 C语言函数 Java方法 数学中的函数 ,就是具有输入量、输出量的一套计算方案。也就是用数据进行操作。 面向对象的思想强调:必须要通过对象的形式来做事情。 函数式思想,尽量忽略面向对象的语法,更强调做什么?而不是用什么形式去做。 lambda表达式就是函数式思想。 格式: (形式参数)->{ 代码块(行为、操作、运算) } 形式参数:如果有多个参数,每个参数之间使用逗号隔开,没有参数就是空的。 ->:是英文-和大于号组成。固定的写法。表示指向动作 代码块{}:表示我们具体要做的事情,也就是方法体内容。 组成lambda表达式的三要素: 形式参数、箭头、代码块 lambda省略规则: 参数类型可以省略,但是如果有多个参数的情况下,不能只省略一个 一个参数,省略参数类型: //省略参数类型: useFlyable((s)->{ System.out.println(s+"飞......"); }); 多个参数,省略参数类型 useFlyable((s,s1)->{ System.out.println(s+"飞......"+s1); }); 如果参数有且只有一个那么可以省略小括号: useFlyable(s->{ System.out.println(s+"飞......"); }); 如果代码块的语句只有一条,那么可以省略大括号和分号,和return关键字: useAddable((a,b)->a+b); 使用lambda表达式的前提条件,在什么条件下能使用lambda: 1、使用lambda表达式必须要有接口,抽象类都不行。 2、要求接口有且只有一个抽象方法。 lambda表达式和匿名内部类的区别: 需要的类型不一样: 1、匿名内部类的父类可以是接口,也可以是抽象类,甚至可以是具体类。 2、lambda表达式:只能是接口 使用的限制不一样 如果接口中有且只有一个方法,那么可以使用lambda表达式,也可以使用匿名内部类 如果接口中有多个抽象方法,那么只能使用匿名内部类,不能使用lambda表达式 实现原理不一样 匿名内部类:归根结底还是一个单独的类,只不过这个类没有名字,只能使用一次。并且当编译之后,匿名内部类会产生一个单独的.class文件 lambda表达式:编译之后,是不会编译出单独的.class字节码文件的,对应的字节码会在运行的时候动态生成。 当某个接口有且只有一个抽象方法,那么这个接口可以成为函数式接口。