lambda表达式

JDK8新特性-lambda表达式

package com.zenqgifeng.practicedemo.lambda;

/**
 * @author zengqifeng
 * @version 1.0
 * @date 2019/12/31 11:25
 * lambda表达式的作用其实和匿名内部类一样       最终都是重写方法,创建了该接口的子类及子类对象传递给调用方
 * 所以只要接收方是函数式接口类型,就可以使用lambda表达式
 *
 * lambda表达式替代的就是函数式接口类型,使用的场景有
 *      方法的参数是函数式接口     methodName(()->{})
 *      变量是函数式接口类型      Function function = ()->{};
 *
 * lambda表达式只关心参数列表以及是否有返回值
 *
 * 1、lambda表达式前提条件:函数式接口
 *      方法参数或者变量类型是接口
 *      接口中只有一个抽象方法
 *   满足以上两个条件的接口称之为     函数式接口
 *   可用@FunctionInterface来检测接口是否是函数式接口,不是函数式接口  该注解会报错
 *
 * 2、lambda表达式标准写法()->{},还可以简写
 *      参数的类型可以省略
 *      当参数只有一个时可以省略括号
 *      当方法体中只有一条语句时,{},return,和;三者可省略(注意,三者要么不省略,要么必须全部省略)
 * 3、参数为接口时可考虑使用lambda表达式替代
 *
 * 4、匿名内部类和lambda表达式的比较
 *    类型
 *      匿名内部类:实现类,抽象类,接口
 *      lambda表达式只针对接口类型
 *    抽象方法个数
 *      lambda表达式要求接口中只能有一个抽象方法
 *    原理
 *      匿名内部类:在编译阶段生成class文件
 *      lambda表达式:程序运行期间动态生成class文件
 *
 * 匿名内部类在《编译阶段》时会生成内部类的二进制文件 带有$的class文件
 * 反编译后可知该类继承接口并重写了方法
 *
 * lambda表达式在程序  《运行阶段》
 * 在lambda表达式当前类中生成一方法,方法体内容就是lambda表达式中内容
 * (程序运行)同时生成一个内部类  带$的class文件,反编译后可知
 * 该匿名内部类实现接口并重写方法,重写的方法调用的就是前面生成的那个方法
 */
public class Demo1 {

    /**
     * lambda表达式标准使用
     * 可替代匿名内部类中方法      匿名方法
     * lambda表达式标准使用方式
     * 有参方法,无参方法皆可
     * (方法参数)-> {匿名函数体}
     */

    public static void main(String[] args) {
        /**
         * 匿名内部类生成Runnable接口的匿名子类
         * 重写接口run方法
         * 创建子类匿名对象
         * 关注点:run方法的参数和方法体
         */
        new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("匿名内部类方式");
            }
        }).start();

        System.out.println("----------------");
        /**
         * lambda表达式
         * 参数是接口的都可以考虑使用lambda表达式
         */
        new Thread(() -> {
            System.out.println("lambda表达式----匿名函数");
        }).start();

        System.out.println("----------------");
        /**
         *lambda表达式简写形式
         */
        new Thread(() -> System.out.println("lambda表达式----匿名函数")).start();
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值