JDK1.8新特性学习总结
主要讲解
- 接口允许定义普通方法之default关键字
- Lambda表达式
- 函数接口
- Stream流操作集合使用大全
1. 接口允许定义普通方法之default关键字
在jdk1.8之前的版本中接口里面只允许定义抽象方法,而在jdk1.8版本已经完全打破了这个规则,允许通过 d e f a u l t \color{red}{default} default 关键字定义普通方法,接下来看下面案例:
/**
* @author Zheng.Zeng
* @version 1.0
* @description
* @date 2020/9/24 9:43
*/
public interface OrderDao {
/**
* 普通方法
*/
default void getOrder(){
System.out.println("我是OrderDao中定义的普通方法");
};
}
小伙伴们是否在想它的作用是什么呢? 那么好我们接着讲解一下它的作用。
- default 修饰的普通方法实现接口不需要实现就可以直接调用
/**
* @author Zheng.Zeng
* @version 1.0
* @description
* @date 2020/9/24 14:27
*/
public class Test{
static class OrderDaoImpl implements OrderDao{
}
public static void main(String[] args) {
OrderDaoImpl orderDao = new OrderDaoImpl();
orderDao.getOrder();
}
}
运行结果
- 上面代码与下面代码比较可以看出当getOrder接口没有被实现的情况会走接口中的普通方法,而getOrder被OrderDaoImpl实现了则会以实现接口中的结果集为准
/**
* @author Zheng.Zeng
* @version 1.0
* @description
* @date 2020/9/24 14:27
*/
public class Test{
static class OrderDaoImpl implements OrderDao{
@Override
public void getOrder(){
System.out.println("实现类OrderDaoImpl");
}
}
public static void main(String[] args) {
OrderDaoImpl orderDao = new OrderDaoImpl();
orderDao.getOrder();
}
}
运行结果
2.Lambda表达式
- 语法:() -> {};
- () : 表示接口中的抽象方法的参数列表
- -> : 表示lambda 隔符
- {} : 表示方法体实现代码
- 案例
/**
* @author Zheng.Zeng
* @version 1.0
* @description
* @date 2020/9/24 14:27
*/
public class Test{
public static void main(String[] args) {
//匿名内部类方式
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("子线程!");
}
}).start();
// lambda表达式
new Thread(() -> System.out.println(Thread.currentThread().getName()+"我是lambda表达式子线程")).start();
}
}
运行结果
小伙伴们是否发现Lambda表达式写的代码更加简洁,更加有B格了。
函数接口定义
- 什么是函数接口?
- 接口中只有一个抽象方法就是函数接口
- 或者通过@FunctionalInterface 注解修饰的接口
- 案例,一下两种方式都是函数接口 重 点 : 接 口 中 只 有 一 个 抽 象 方 法 的 话 , 默 认 为 函 数 接 口 \color{red}{重点:接口中只有一个抽象方法的话,默认为函数接口} 重点:接口中只有一个抽象方法的话,默认为函数接口
/**
* @author Zheng.Zeng
* @version 1.0
* @description
* @date 2020/9/24 10:14
*/
public interface PayDao {
void pay(double money);
}
/**
* @author Zheng.Zeng
* @version 1.0
* @description
* @date 2020/9/24 10:14
*/
@FunctionalInterface
public interface PayDao {
void pay(double money);
}