是JDK1.8新增的特性。
在此之前,我们想要将行为传给函数,就有的方式是通过匿名内部类。在JDK1.8之后,我们就可以通过Lam表达来实现。用()->就可以代替整个匿名内部类
语法格式:(parameters) -> expression或
(parameters) ->{ statements; }
代替匿名内部类:
使用匿名内部类:
public void oldRunable() {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("The old runable now is using!");
}
}).start();
}
使用Lambda表达式:
public void runable() {
new Thread(() -> System.out.println("It's a lambda function!")).start();
}
Lambda表达式 和 匿名类的区别:
一个关键的不同点就是关键字 this。
匿名类的 this 关键字指向匿名类,而lambda表达式的 this 关键字指向包围lambda表达式的类。
另一个不同点是二者的编译方式。
Java编译器将lambda表达式编译成类的私有方法。使用了Java 7的 invokedynamic 字节码指令来动态绑定这个方法。