lambda表达式注意点

1.lambda的历史:波长单位,带有参数变量的表达式称为lambda表达式

2.lambda表达式的基本语法:参数列表->表达式

  1.参数列表:

      1.如果没有参数,直接用()来表示,()不能省略

      2.如果只有一个参数,并且参数写了类型,参数外面一定要加();

      3.如果只有一个参数,并且参数不写类型,那么这个参数外面可以不用加();

      4.如果有两个或多个参数,不管是否写参数类型,都要加();

      5.如果参数要加修饰符或者标签,参数一定要加上完整的类型;

  2.表达式:

    1.如果表达式只有一行,那么可以直接写,不需要{};

    2.如果表达式有多行,需要用{}变成代码块;

    3.如果表达式是代码块,并且方法需要返回值,在代码块中就必须返回一个返回值;

    4,如果只有单行的情况,并且方法需要返回值,不能有return,编译器会自动帮我们推导return

-------------------------------------------------------------------------------------------------

lambda表达式中的变量:

1.参数

2.局部变量

3.自由变量(不是参数也不是局部变量)

结论:lambda表达式中的自由变量会被保存,无论什么时候执行lambda表达式,都可以直接使用;

1.自由变量在lambda表达式中不能被修改(final);(操作自由变量的代码块称为闭包;)

2.参数和局部变量的使用方式和普通的变量的使用方式相同;

3.lambda表达式中的this,指向创建lambda表达式的方法中的this;[重要]

-------------------------------------------------------------------------------------------------

函数式接口

1.我们能够写lambda表达式的地方?一个接口,且接口里面只有一个抽象方法;

2.在Java中,把只有一个抽象方法的接口称为函数式接口,如果一个接口是函数式接口,我们可以在接口上添加

@FunctionInterface标签表明这是一个函数式接口;

3.无论是否标示@FunctionInterface,只要满足函数式接口的接口,Java都会直接识别为函数式接口;

4.简化函数式接口的使用是Java中提供lambda表达式唯一的作用;

5.可以用接口直接来引用一个lambda表达式;

6.函数式接口里面可以写Object对象中的方法;

7.lambda表达式中的异常处理:lambda表达式中产生的异常要么直接在代码块中处理,要么接口的方法声明抛出;

-------------------------------------------------------------------------------------------------

方法引用:

类::静态方法;

对象::方法;

对象::静态方法;

-------------------------------------------------------------------------------------------------

构造器引用(需要有一个无参构造方法)

类::new

构造器引用对应的函数式接口里面的方法格式一定是  返回一个对象/方法没有参数

--------------------------------------------------------------------------------------------------

接口的默认方法:

1.可以实现多次继承;

2.解决冲突:

  1,如果两个接口有同名的默认方法,子类必须实现冲突的方法,指定使用哪个父接口中的默认类

    @Override

    public void breath() {

        //ILandAnimal.super.breath();

        System.out.println("123");

    }


    2,如果父类里面有一个方法和接口中一个默认方法同名,那么使用父类里面的方法;

    3,由2可得:你永远不要期望通过接口里面的默认方法来改变Object对象里面的方法;

3,接口里面可以直接写接口的静态方法了;

4,常见的一些模式被消灭了

  1,工具类

  2,适配器模式

你可能感兴趣的:(lambda表达式注意点)