前情提示:
lambda表达式是JDK1.8的新特性
1. 进化的初级阶段之静态内部类
public class LambdaDemo { //静态内部类 static class ListenMusic implements Runnable { @Override public void run() { for (int i = 5; i > 0; i--) { System.out.println("---静态内部类**一边听歌---" + i); } } } public static void main(String[] args) { new Thread(new ListenMusic()).start(); } }
结果:
---静态内部类**一边听歌---5 ---静态内部类**一边听歌---4 ---静态内部类**一边听歌---3 ---静态内部类**一边听歌---2 ---静态内部类**一边听歌---1
2.进化的第二阶段之局部内部类
public class LambdaDemo { //局部内部类,方法里面的类就是局部内部类 //这里,我们把局部内不能放在了类方法里面 public static void main(String[] args) { class ListenMusic implements Runnable { @Override public void run() { for (int i = 5; i > 0; i--) { System.out.println("---静态内部类**一边听歌---" + i); } } } new Thread(new ListenMusic()).start(); } }
结果:
---静态内部类**一边听歌---5 ---静态内部类**一边听歌---4 ---静态内部类**一边听歌---3 ---静态内部类**一边听歌---2 ---静态内部类**一边听歌---1
3.进化的第三阶段之匿名内部类
public class LambdaDemo { //匿名内部类必须要跟在new 类名()或者new 接口名()后面 //这里,我们把匿名内部类放在了类方法里面 public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { for (int i = 5; i > 0; i--) { System.out.println("---匿名内部类**一边听歌---" + i); } } }).start(); } }
结果:
---匿名内部类**一边听歌---5 ---匿名内部类**一边听歌---4 ---匿名内部类**一边听歌---3 ---匿名内部类**一边听歌---2 ---匿名内部类**一边听歌---1
4.进化的第四阶段之lambda表达式诞生
public class LambdaDemo { //lambda表达式 //这里,我们把lambda放在了main()方法里面 public static void main(String[] args) { new Thread(() -> { for (int i = 5; i > 0; i--) { System.out.println("---lambda**一边听歌---" + i); } } ).start(); } }
结果:
---lambda**一边听歌---5 ---lambda**一边听歌---4 ---lambda**一边听歌---3 ---lambda**一边听歌---2 ---lambda**一边听歌---1
再来看一个lambda表达式的例子
public class LambdaDemo { public static void main(String[] args) { Music m = () -> { System.out.println("---我爱lamba音乐---"); }; m.listen(); } } interface Music { void listen(); }
结果:
---我爱lamba音乐---
抽象类不能用在lambda表达式,因为抽象类不能实例化。
lambda表达式的()里面可以带参数
lambda表达式与函数时接口有关