Java8新特性——Lambda表达式

本文详细介绍了Java8的重要特性——Lambda表达式,包括其概念、为何使用、基础语法以及如何从匿名内部类转换为Lambda。此外,还讲解了函数式接口、方法引用、构造器引用和数组引用,帮助读者深入理解Java8的新特性。
摘要由CSDN通过智能技术生成

Java8新特性——Lambda表达式

    • 2.1 什么是Lambda表达式?
    • 2.2 为什么要使用Lambda表达式?
    • 2.3 从匿名内部类到 Lambda 的转换
    • 3.1 语法一:无参无返回值,Lambda 体只需要一条语句
    • 3.2 语法二:传递一个参数,无返回值
    • 3.3 语法三:传递一个参数时,参数的小括号可以省略,无返回值
    • 3.4 语法四:传递两个参数,有返回值
    • 3.5 语法五:当 Lambda 体只有一条语句时,return 与大括号可以省略
    • 4.1 什么是函数式接口?
    • 4.2 自定义函数式接口(普通接口)
    • 4.3 函数式接口中使用泛型
    • 4.4 Java 内置四大核心函数式接口
  • 五、Lambda表达式的规范
  • 六、方法引用、构造器引用与数组引用

一、Java8新特性

Java8新特性(又称为 jdk1.8)是Java语言开发的一个主要版本。Oracle公司于2014年3月18日发布Java8,它支持函数式编程,新的JavaScript引擎,新的日期API,新的Stream API等。——摘自菜鸟教程

1.1 Java8 新增特性

  •  Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。
  •  方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有 Java 类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。
  •  默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。
  •  新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。
  •  Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。
  •  Date Time API − 加强对日期与时间的处理。
  •  Optional 类 − Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。
  •  Nashorn, JavaScript 引擎 − Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用。

1.2 Java8 前后的区别

  •  Java8 之前

    interface之中可以定义变量和方法,变量必须是 public、static、final 修饰的,方法必须是 public、abstract 修饰的。( 其中 public 类型和抽象方法需要子类实现。 )

    /**
     * @author QHJ
     * @date 2021/11/17  11:39
     * @description: Java8 接口
     */
    public interface JDK8Interface {
     
        // 定义变量
        public String userName = "zhangsan";
        static String password= "123456";
        final int age = 0;
    
        // 定义方法
        void get();
    }
    
    
    
    /**
     * @author QHJ
     * @date 2021/11/17  11:42
     * @description: Java8 实现类
     */
    public class JDK8InterfaceImpl implements JDK8Interface {
     
        @Override
        public void get() {
     
            System.out.println("这是public抽象方法的实现类...");
        }
    }
  •  Java8 开始

    interface中的方法支持使用 static 和 default 修饰,可以写方法体,但不需要子类重写。( public类型和抽象方法仍然需要子类实现。 )

    /**
     * @author QHJ
     * @date 2021/11/17  11:39
     * @description: Java8 接口
     */
    public interface JDK8Interface {
     
        // 定义变量
        public String userName = "zhangsan";
        static String password= "123456";
        final int age = 0;
    
        // 定义方法
        void get();
    
        /**
         * 默认方法,可以写方法体
         */
        default void getDefault(){
     
            System.out.println("这是默认方法,可以写方法体...");
        }
    
        /**
         * 静态方法,可以写方法体
         */
        static void getStatic(){
     
            System.out.println("这是静态方法,可以写方法体...");
        }
    }
    
    
    
    /**
     * @author QHJ
     * @date 2021/11/17  11:42
     * @description: Java8 实现类
     */
    public class JDK8InterfaceImpl implements JDK8Interface {
     
        @Override
        public void get() {
     
            System.out.println("这是重写的public方法...");
        }
    
        /**
         * 默认和静态方法不需要重写·
         */
        /*@Override
        public void getDefault() {
            System.out.println("这是重写的默认方法...");
        }*/
    }

    小贴士:

    Java8 前

    接口定义的方法:使用public修饰的方法和抽象方法需要子类实现;

    接口定义的变量:使用public、static、final修饰。

    Java8 开始

    接口定义的方法:static、default修饰的为普通方法,可以有方法体,不需要子类重写;

    public、抽象方法没有方法体,需要子类重写;

    接口定义的变量:使用public、static、final修饰。

二、 lambda表达式简介

2.1 什么是Lambda表达式?

Lambda 是一个 匿名

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值