jdk1.8新特性--lambda表达式

入门

是什么

lambda表达式是jdk1.8的新特性,它本质上是一种匿名函数。

什么时候用

如果一个方法的参数是一个接口,一般来说我们使用这个方法的时候会使用匿名内部类。现在,我们则可以使用lambda表达式替代匿名内部类。

怎么用

lambda表达式格式
(参数列表) -> {方法语句}
其实就类似于一个函数,输入入参,经过函数体的处理之后,给你一个结果。

举例

首先我们新建一个接口test

public interface test {
    void getTest();
}

然后我们新建一个带有主方法的类Test01

public class Test01 {

    public static void main(String[] args) {
        //匿名内部类方式调用接口
        getStudent(new test() {
            @Override
            public void getTest() {
                System.out.println("hello");
            }
        });
        //lambda表达式调用接口
        getStudent(() -> {
            System.out.println("hello lambda");
        });
    }
    public static void getStudent(test name){
        System.out.println("getStudent 执行了");
        name.getTest();
    }
}

了解

执行过程分析

匿名内部类执行方式

在代码编译的时候,会生成一个class文件。可使用luyten进行反编译。

lambda表达式执行方式

在代码运行的时候会在Test01中新建一个静态方法,静态方法中是lambda表达式中的代码,然后新建一个匿名内部类,在匿名内部类中覆盖重写接口中的方法,同时在其内调用新建的静态方法。

lambda表达式的省略格式

可以省略的内容:

  • 入参的数据类型
  • 如果大括号内只有一行代码,return 大括号 分号可以同时省略(注意:不能只省略一个)
  • 如果小括号内只有一个参数可以省略小括号

使用lambda表达式的前提条件

  • 方法参数必须是接口
  • 借口内必须有且仅有一个抽象方法

如果一个接口有且仅有一个抽象方法,则这个接口即为函数式接口。
注解@FunctionInterface放在接口定义的上面,即表示其为函数式接口。

使用

使用lambda表达式的优点有很多,除了显而易见的简洁之外,还能从一定程度上避免内存泄漏,详情可见如下链接:
https://www.zhihu.com/question/447582599

上一篇:CS61A笔记1


下一篇:JAVA面向对象学习——java面向对象概念———什么是lambda表达式———经典解读