JDK1.8新特性学习总结

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中定义的普通方法");
    };
}

小伙伴们是否在想它的作用是什么呢? 那么好我们接着讲解一下它的作用。

  1. 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();
    }
}

运行结果
在这里插入图片描述

  1. 上面代码与下面代码比较可以看出当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格了。

函数接口定义
  • 什么是函数接口?
    1. 接口中只有一个抽象方法就是函数接口
    2. 或者通过@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);
}
Stream流操作集合使用大全
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值