Java8新特性——Lambda表达式
-
- 2.1 什么是Lambda表达式?
- 2.2 为什么要使用Lambda表达式?
- 2.3 从匿名内部类到 Lambda 的转换
-
- 3.1 语法一:无参无返回值,Lambda 体只需要一条语句
- 3.2 语法二:传递一个参数,无返回值
- 3.3 语法三:传递一个参数时,参数的小括号可以省略,无返回值
- 3.4 语法四:传递两个参数,有返回值
- 3.5 语法五:当 Lambda 体只有一条语句时,return 与大括号可以省略
-
- 4.1 什么是函数式接口?
- 4.2 自定义函数式接口(普通接口)
- 4.3 函数式接口中使用泛型
- 4.4 Java 内置四大核心函数式接口
- 五、Lambda表达式的规范
- 六、方法引用、构造器引用与数组引用
一、Java8新特性
Java8新特性(又称为 jdk1.8)是Java语言开发的一个主要版本。Oracle公司于2014年3月18日发布Java8,它支持函数式编程,新的JavaScript引擎,新的日期API,新的Stream API等。——摘自菜鸟教程
1.1 Java8 新增特性
- Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。
- 方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有 Java 类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
- 默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。
- 新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。
- Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。
- Date Time API − 加强对日期与时间的处理。
- Optional 类 − Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。
- Nashorn, JavaScript 引擎 − Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用。
1.2 Java8 前后的区别
-
Java8 之前
interface之中可以定义变量和方法,变量必须是 public、static、final 修饰的,方法必须是 public、abstract 修饰的。(
其中 public 类型和抽象方法需要子类实现。
)/** * @author QHJ * @date 2021/11/17 11:39 * @description: Java8 接口 */ public interface JDK8Interface { // 定义变量 public String userName = "zhangsan"; static String password= "123456"; final int age = 0; // 定义方法 void get(); } /** * @author QHJ * @date 2021/11/17 11:42 * @description: Java8 实现类 */ public class JDK8InterfaceImpl implements JDK8Interface { @Override public void get() { System.out.println("这是public抽象方法的实现类..."); } }
-
Java8 开始
interface中的方法支持使用 static 和 default 修饰,可以写方法体,但不需要子类重写。(
public类型和抽象方法仍然需要子类实现。
)/** * @author QHJ * @date 2021/11/17 11:39 * @description: Java8 接口 */ public interface JDK8Interface { // 定义变量 public String userName = "zhangsan"; static String password= "123456"; final int age = 0; // 定义方法 void get(); /** * 默认方法,可以写方法体 */ default void getDefault(){ System.out.println("这是默认方法,可以写方法体..."); } /** * 静态方法,可以写方法体 */ static void getStatic(){ System.out.println("这是静态方法,可以写方法体..."); } } /** * @author QHJ * @date 2021/11/17 11:42 * @description: Java8 实现类 */ public class JDK8InterfaceImpl implements JDK8Interface { @Override public void get() { System.out.println("这是重写的public方法..."); } /** * 默认和静态方法不需要重写· */ /*@Override public void getDefault() { System.out.println("这是重写的默认方法..."); }*/ }
小贴士:
Java8 前
接口定义的方法:使用public修饰的方法和抽象方法需要子类实现;
接口定义的变量:使用public、static、final修饰。
Java8 开始
接口定义的方法:static、default修饰的为普通方法,可以有方法体,不需要子类重写;
public、抽象方法没有方法体,需要子类重写;
接口定义的变量:使用public、static、final修饰。
二、 lambda表达式简介
2.1 什么是Lambda表达式?
Lambda 是一个 匿名