Lambda表达式

本文介绍了Java8中引入的Lambda表达式这一重要特性。通过示例对比了Lambda表达式与传统匿名内部类的使用方式,并阐述了Lambda表达式的适用场景及其实现原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2014年3月Oracle所发布的Java 8(JDK 1.8)中,加入了Lambda表达式的重量级新特性,让我们不需要关心怎么

做,只需要关心做什么,从此为我们打开了新世界的大门。

 Lambda表达式的使用前提:
        1. 必须有接口。并且接口中有且仅有一个需要被重写的抽象方法。 (这种接口叫做函数式接口)
        2. 必须支持上下文推导。方法参数要是接口类型。或者 使用一个接口类型的变量接收Lambda。

Lambda表达式的标准格式:
    (参数类型 参数名) -> {
        方法体;
        return 返回值;

    }

示例:


public class Runnable implemens Runnable{

    public void run(){

        System.out.println("多线程任务执行!");

    }

}

public class LambdaTest{

    public static void main(String [] args){

        // Lambda

        new Thread(()->{

            System.out.println("多线程任务执行!");

        }).start();

        //传统匿名内部类

        new Thread(new Runnable(){

            public void run(){

                System.out.println("多线程执行!");

            }

        })

    }

}

 

省略规则:
        1. 小括号中的参数类型可以省略。
        2. 如果小括号中只有一个参数,那么小括号也可以省略。

        3. 如果大括号中只有一个语句,俺么不管这个方法有没有返回值,都可以省略大括号return以及分号。

Lambda表达式能否完全替换匿名内部类, 不能。
        1. 匿名内部类可以是普通类,抽象类,以及接口。 Lambda表达式只支持接口。

        2. 匿名内部类可以重写多个方法。 Lambda表达式要求只有一个方法。

Lambda表达式的原理和匿名内部类完全不同。
    Lambda表达式不是匿名内部类的语法糖。
    Lambda表达式是使用的动态的字节码指令。 invokedynamic
    匿名内部类用的是静态的字节码指定。 invokestatic invokeinterface........



   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值