1.函数式编程思想(lambda表达式)
函数式思想强调“必须通过对象的形式来做事情”
lambda表达式格式:()-> {}
- ():可看成方法形参
- ->用箭头指向代码块
- {代码块}
使用前提:1.有一个接口2.接口中有且只有一个抽象方法
public class Test9 {
//通过匿名内部类的方法
public static void main(String[] args) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("多线程启动了");
}
}).start();
//可以改写为lamb-da
new Thread( ()-> {
System.out.println("多线程启动了");
}).start();
}
}
//代参
public class FlyableDemo {
public static void main(String[] args) {
/*useFlyable(new Flyable() {
@Override
public void fly(String s) {
System.out.println(s+"可以飞");
}
});*/
useFlyable((String s)->{
System.out.println(s+"可以飞");
});
}
public static void useFlyable(Flyable f){
f.fly("UAV");
}
}
//带参带返回
public class AddableDemo {
public static void main(String[] args) {
/*useAddable(new Addable() {
@Override
public int add(int x, int y) {
int sum = x + y;
return sum;
}
});*/
useAddable((int x,int y)->{
int num = x + y;
return num;
});
}
private static void useAddable(Addable a){
System.out.println(a.add(1,2));
}
}
2.lambda表达式省略模式
- 参数的类型可以省略,但是有多个参数的情况下不能只省略一个
- 如果参数有且仅有一个,可以省略小括号
- 如果代码块的语句只有一条,可以省略分号,大括号,如果有return,return也要省略掉
public class FlyableDemo {
public static void main(String[] args) {
useFlyable(s -> System.out.println(s+"可以飞"));
}
public static void useFlyable(Flyable f){
f.fly("UAV");
}
}
2.lambda表达式注意事项
- 使用Lambda表达式必须要接口,且有且只有一个抽象函数
- 必须有上下文环境(
-根据局部变量的赋值可得知lambda对应接口:Runnable = ()->System.out.println(“Lambda表达式”));
-根据调用方法的参数得知Lambda对应的接口:new Thread(()->System.out.println(“Lambda表达式”)).start();
3.lambda表达式与匿名内部类的区别
匿名内部类:允许抽象类具体类和接口;允许多个抽象类方法;匿名内部类编码后会生成字节码文件
lambda表达式:只允许接口;只允许接口只拥有一个抽象方法;实现原理不同,编译后不会生成字节码文件