美文网首页程序员
java8新特性之lambda表达式

java8新特性之lambda表达式

作者: 冒险小A | 来源:发表于2018-03-25 18:04 被阅读0次
什么是语法糖:

语法糖指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。往往给程序员提供了更实用的编码方式,有益于更好的编码风格,更易读。不过其并没有给语言添加什么新东西。

Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁。当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口。就是使用Lambda语法来代替匿名的内部类,代码不仅简洁,而且还可读。lambda表达式就是一个典型的语法糖.实际会被翻译为对象式代码.

用简单易懂的话说,lambda表达式就是将那些代码中一定的,必要的,不可变的一部分给省略掉了,省略掉的部分JVM根据上下文推断出来,简单示例如下:

//没有用lambda表达式时
public class LambdaDemo1 {
    public void oldCode() {
        new Thread() {
            public void run() {
                System.out.println("hello lambda!");
            }
        }.start();
    }
}
//使用lambda表达式后
public class LambdaDemo1 {
    public void oldCode() {
        new Thread(()->System.out.println("hello lambda!")).start();
    }
}
使用lambda表达式省略的部分

可以看出,lambda表达式让代码更简略清晰,模拟了函数式编程的外观,但是翻译后底层还是会和原来一样.这也就是语法糖的作用了.


lambda的历史: λ (波长单位), 这里指带有参数变量的表达式称为lambda表达式.

lambda表达式的基本语法 :
参数列表 -> 表达式
参数列表:
  1. 如果没有参数;直接用()来表示;()不能省略.
  2. 如果只有一个参数,并且参数写了类型,参数外面一定要加().
  3. 如果只有一个参数,并且参数不写类型,那么这个参数外面可以不用加().
  4. 如果有两个或多个参数,不管是否写参数类型,都要加().
  5. 如果参数要加修饰符或者标签,参数一定要加上完整的类型.所以此时也要用().
表达式:
  1. 如果表达式只有一行,那么可以直接写(不需要用{}).
  2. 如果只有单行的情况,并且方法需要返回值,此时不能有return,JVM会自动帮我们推导return.
  3. 如果表达式有多行,需要用{}变成代码块.
  4. 如果表达式是代码块,并且方法需要返回值,那么,在代码块中就必须返回一个返回值.

lambda中的变量:
  1. 参数
  2. 局部变量.
  3. 自由变量(即除了它自己的参数和内部定义的局部变量).
    1)自由变量在lambda表达式中不能修改;
    2)参数和局部变量的使用方法和普通的变量使用方法相同;
    3)lambda表达式中的this指向"创建lambda表达式的方法中的this"

在Java8以前,如果要在内部类访问外部对象的一个本地变量,那么这个变量必须声明为final才行。在Java8中,这种限制被去掉了,代之以一个新的概念,“effectively final”。它的意思是你可以声明为final,也可以不声明final但是按照final来用,也就是一次赋值永不改变。换句话说,保证它加上final前缀后不会出编译错误。 在Java8中,内部类和λ表达式都可以访问effectively final的本地变量。

闭包:

操作自由变量的代码块,称之为闭包,在java中,lambda表达式就是闭包,事实上,内部类一直都是闭包.

相关文章

  • Java 8、9 语言新特性

    Java语言新特性 Java8 Java 8 新特性 Lambda 表达式 Lambda表达式(也叫做闭包)是Ja...

  • java8 新特性

    java8 新特性 1 Lambda表达式 lambda 是一个匿名函数, lambda 表达式基本语法: jav...

  • java8

    现代化 Java - Java8 指南 JAVA8新特性(吐血整理) 理解 Lambda 表达式

  • Lambda表达式和函数式接口

    初识lambda表达式 lambda表达式是Java8的新特性,可以将lambda表达式看成是精简语法的匿名内部类...

  • Java8 新特性之 Lambda 表达式

    Lambda表达式 lambda表达式是java8给我们带来的几个重量级新特性之一,借用lambda表达式,可以让...

  • Lambda的基础使用

    Lambda是java8出的新特性,之前很少用Lambda表达式写代码,现在慢慢习惯用Lambda表达式,并且记得...

  • Lambda表达式

    内容整理自bilibili 参考链接 一、lambda表达式的简介 lambda表达式是java8添加的新特性; ...

  • Java8 新增了非常多的特性

    新特性Java8 新增了非常多的特性,我们主要讨论以下几个: Lambda 表达式 − Lambda允许把函数作为...

  • Lambda 表达式

    Lambda 表达式 声明:java8新特性系列为个人学习笔记,参考地址点击这里,侵删!! Lambda 表达式,...

  • Java8新特性

    1、语言新特性 1.1、Lambda表达式(也称闭包) Lambda表达式是Java8最大的卖点,它允许交函数作为...

网友评论

    本文标题:java8新特性之lambda表达式

    本文链接:https://www.haomeiwen.com/subject/cytkcftx.html