Lambda表达式.txt 2.5 KB

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