目录
1、Lambda表达式
Lambda表达式(也称为闭包)Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中),或者把代码看成数据。Lambda表达式用于简化Java中接口式的匿名内部类。被称为函数式接口的概念。函数式接口就是一个具有一个方法的普通接口。像这样的接口,可以被隐式转换为lambda表达式。
语法:
(参数1,参数2...) -> { ... }
优点:1.代码更加简洁
2.不会单独生成一个.class文件
(1)没有参数时使用Lambda表达式
用法示例:
public class Demo {
public static void main(String[] args) {
//(1)没有参数时使用Lambda表达式
student s=()->
{System.out.println("我爱学习");}
;
s.study();
}
}
//只有一个抽象方法的接口
interface student{
public void study();
}
运行结果:
我爱学习
(2)带参数时使用Lambda表达式
用法示例:
public class Demo {
public static void main(String[] args) {
//(2)带参数时使用Lambda表达式
student s2=(String subject)->{
System.out.println("学习" + subject);
};
s2.study("math");
}
}
//只有一个抽象方法的接口
interface student{
public void study(String subject);
}
运行结果:
学习math
(3)代码块中只一句代码时使用Lambda表达式
用法示例:
public class Demo {
public static void main(String[] args) {
//(3)代码块中只一句代码时使用Lambda表达式
student s1=(String subject)->
System.out.println("我爱学习"+subject);
//只有一句代码时,{}可以省略
s1.study("English");
}
}
//只有一个抽象方法的接口
interface student{
public void study(String subject);
}
运行结果:
我爱学习English
(4)代码块中有多句代码时使用Lambda表达式
用法示例:
public class Demo {
public static void main(String[] args) {
//(4)代码块中有多句代码时使用Lambda表达式
student s1=(String subject)->{
System.out.println("我爱学习");
System.out.println(subject);
};
s1.study("编程");
}
}
//只有一个抽象方法的接口
interface student{
public void study(String subject);
}
运行结果:
我爱学习
编程
(5)有返回值的代码块
用法示例:
public class Demo {
public static void main(String[] args) {
//(5)有返回值的代码块
student s=()->{
System.out.println("我爱学习");
return 10;
};
System.out.println(s.study());
}
}
//只有一个抽象方法的接口
interface student{
public int study();
}
运行结果:
我爱学习
10
(注意:当返回值只有一句话时,可以不使用大括号,如果写return必须带大括号
例如:
student s=(String subject)->subject==null?1:0;
System.out.println(s.study(null));
)
(6)参数中使用final关键字
用法示例:
public class Demo {
public static void main(String[] args) {
//(6)参数中使用final关键字 重写时可以不用写类型和final
student s1=(subject)->
System.out.println("我爱学习"+subject);
s1.study("English");
}
}
//只有一个抽象方法的接口
interface student{
public void study(final String subject);
}
运行结果:
我爱学习English
2、接口中的默认方法和静态方法
interface A{
public void eat();
public default void print(){}
public static void method(){}
}
默认方法与静态方法并不影响函数式接口的契约,可以任意使用