01_1)jdk 1.8 新特性之Lambda原理简介

学习过jdk1.8新特性后,知道了Lambda可以简化匿名内部类的写法

下面一下实现原理

1.首先看一下匿名内部类的写法,编译成class后是生成了xxx$1.class的匿名内部类

2.我们反编译Test01$1.class

惊不惊喜....匿名内部类底层是创建了一个clsss去实现接口

和我们自己创建一个class去实现接口差不多,匿名内部类只是编译时自动创建了而已

 3.使用Lambda写法我们看下编译后的class

发现虽然lambda可以简化匿名内部类的写法,但是实现原理不一样,根本没额外创建一个calss去实现接口

4.尝试用jd-gui.反编译工具发现无法反编译

应该是jd-gui不支持jdk1.8新特性的语法反编译.....

5.使用jdk自带的javap查看字节码的工具查看lambda语法编译后的字节码

javap -c -p Test02.class

-c 输出类中各方法的未解析的代码,即构成 Java 字节码的指令。

-private 显示所有类和成员。

 发现字节码中生成了一个

private static java.lang.String lambda$test$0();

的静态方法,里面执行是是我们在lambda {}语句块中的语句,

也就是说底层原理是lambda生成了一个静态代理方法,来执行代码块的语句。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值