Java Lambda表达式学习笔记

本文通过示例代码对比了Java中的Lambda表达式与匿名内部类的使用方式,阐述了两者在所需类型、使用限制及实现原理上的区别,强调Lambda表达式在接口中的单一抽象方法约束及其动态字节码生成特性。

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

Lambda表达式和匿名内部类

演示代码

public class LamdaStudy {
	public static void main(String[] args) {
		//匿名内部类
		new Thread(new Runnable() {
			@Override
			public void run() {
				// TODO 自动生成的方法存根
				System.out.println(Thread.currentThread().getName() + " has been started.");
			}
		}).start();
		//Lambda表达式
		new Thread(() -> System.out.println(Thread.currentThread().getName() + " has been started.")).start();
		Runnable r = () -> System.out.println(Thread.currentThread().getName() + " has been started.");
		new Thread(r).start();
	}
}

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

Lambda表达式与匿名内部类的区别

1. 所需类型不同
匿名内部类可以是接口,也可以是抽象类,还可以是具体类
Lambda表达式只能是借口

2. 使用限制不同
如果接口中有且仅有一个抽象方法,可以使用Lambda表达式,也可以使用匿名内部类
如果接口中多于一个抽象方法,只能使用匿名内部类而不能使用Lambda表达式

3. 实现原理不同
匿名内部类编译后会产生一个单独的class字节码文件作为临时类进行调用
Lambda表达式编译过后不会产生单独的class字节码文件,对应的字节码会在运行的时候动态生成

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值