当前位置: 首页 > news >正文

网站开发按钮素材包就业的培训学校

网站开发按钮素材,包就业的培训学校,德州网站怎样建设,整站seo定制一、简要描述 Lambda的底层实现原理Lambda表达式编译和运行过程 二、Lambda的底层实现原理 Lambda表达式的本质 函数式接口的匿名子类的匿名对象 反编译:cfr-0.145.jar 反编译:LambdaMetafactory.metafactory() 跟踪调试,转储Lambda类&#x…

一、简要描述

  • Lambda的底层实现原理
  • Lambda表达式编译和运行过程

二、Lambda的底层实现原理

  • Lambda表达式的本质

        函数式接口的匿名子类的匿名对象

  • 反编译:cfr-0.145.jar

        反编译:LambdaMetafactory.metafactory()

        跟踪调试,转储Lambda类:

                jdk.internal.lambda.dumpProxyClasses

                LambdaPrinciple$Lambda$1.class

  • 结论

        Lambda底层用匿名内部类实现:ASM技术

        Lambda表达式是个语法糖

三、Lambda表达式编译和运行过程

  • JVM参数:jdk.internal.lambda.dumpProxyClasses
    • 命令java -Djdk.internal.lambda.dumpProxyClasses ClassName
    • 转储得到内部类ClassName$$Lambda$1.class
    • 反编译java -jar cfr-0.145.jar LambdaPrinciple.class --decodelambdas false
  • 本质:函数式接口的匿名子类的匿名对象

        Lambda表达式与函数接口的抽象函数格式一一对应

1、LambdaPrinciple 代码实现

package tech.flygo.lambda.demo4;import java.util.Arrays;
import java.util.List;/*** Lambda表达式的底层实现* 语法:* (parameters) -> { statements; }* 或* (parameters) -> expression** <p>* JVM参数:jdk.internal.lambda.dumpProxyClasses* 命令:java -Djdk.internal.lambda.dumpProxyClasses ClassName* 转储得到内部类:ClassName$$Lambda$1.class* 反编译:java -jar cfr-0.145.jar LambdaPrinciple.class --decodelambdas false* <p>* 本质:函数式接口的匿名子类的匿名对象* Lambda表达式与函数接口的抽象函数格式一一对应*/
public class LambdaPrinciple {public static void main(String[] args) {List<String> stringList = Arrays.asList("one", "two", "three");// 通过lambda表达式实现元素遍历stringList.forEach(s -> {System.out.println(s);});}
}

2、cfr工具包解码Lambda代码实现

CFR解析包

cfr-0.145.jaricon-default.png?t=N7T8https://www.yuque.com/attachments/yuque/0/2023/jar/1509175/1684030971197-5456d0f4-1c6a-45d0-bf96-009ee00cd9cd.jar

2.1、复制cfr工具包到class目录下

2.2、使用Java命令解码Lambda代码实现

  • 进入class目录
  • class和工具包同一级目录
  • 使用java命令解码Lambda实现内容

   java -jar cfr-0.145.jar LambdaPrinciple.class --decodelambdas false

2.3、解码出来的Lambda内容

/** Decompiled with CFR 0.145.*/
package tech.flygo.lambda.demo4;import java.io.PrintStream;
import java.lang.invoke.LambdaMetafactory;
import java.util.Arrays;
import java.util.List;
import java.util.function.Consumer;public class LambdaPrinciple {public static void main(String[] args) {List<String> stringList = Arrays.asList("one", "two", "three");stringList.forEach((Consumer<String>)LambdaMetafactory.metafactory(null, null, null, (Ljava/lang/Object;)V, lambda$main$0(java.lang.String ), (Ljava/lang/String;)V)());}private static /* synthetic */ void lambda$main$0(String s) {System.out.println(s);}
}

3、分析Lambda实现逻辑

3.1、LambdaMetafactory.metafactory()方法

从下面的源码可以看出,Java是严格遵循的面向对象原则,这里返回的是一个对象,而不是一个函数体。

3.2、调用InnerClassLambdaMetafactory

3.3、InnerClassLambdaMetafactory.buildCallSite()构造调用点

3.4、调用InnerClassLambdaMetafactory.spinInnerClass()

4、使用Java命令打开dumps调试模式

Java命令java -Djdk.internal.lambda.dumpProxyClasses ClassName

打开调试模式

4.1、进入class文件包文件的目录

特别注意:比如class文件的包路径为 tech.flygo.lambda.demo4,则进入目录 tech的上一级目录

执行java命令:java -Djdk.internal.lambda.dumpProxyClasses tech.flygo.lambda.demo4.LambdaPrinciple

4.2、查看Lambda生成的匿名内部类

5、Java对动态语言的支持

使用javap查看class字节码:javap -p -v LambdaPrinciple

Java7之后增加了动态指令InvokeDynamic,Java支持动态语言


文章转载自:
http://dinncothermometry.tqpr.cn
http://dinncopinch.tqpr.cn
http://dinncoaauw.tqpr.cn
http://dinncopanellist.tqpr.cn
http://dinncodomino.tqpr.cn
http://dinncozebrula.tqpr.cn
http://dinncorap.tqpr.cn
http://dinncoasiadollar.tqpr.cn
http://dinncocredenza.tqpr.cn
http://dinnconote.tqpr.cn
http://dinncocervicovaginal.tqpr.cn
http://dinncostrychnine.tqpr.cn
http://dinnconitrochalk.tqpr.cn
http://dinncovicarial.tqpr.cn
http://dinncoepicurean.tqpr.cn
http://dinncosurrealistic.tqpr.cn
http://dinncoinflorescence.tqpr.cn
http://dinncogorgio.tqpr.cn
http://dinncoprut.tqpr.cn
http://dinncofluoroplastic.tqpr.cn
http://dinncodarling.tqpr.cn
http://dinncomaist.tqpr.cn
http://dinncochasteness.tqpr.cn
http://dinncohollandia.tqpr.cn
http://dinncomonkery.tqpr.cn
http://dinncoconsume.tqpr.cn
http://dinncomerle.tqpr.cn
http://dinncopharos.tqpr.cn
http://dinncoanisometropia.tqpr.cn
http://dinncoishtar.tqpr.cn
http://dinncofoliar.tqpr.cn
http://dinncodiatomite.tqpr.cn
http://dinncoheptahydrate.tqpr.cn
http://dinncolaird.tqpr.cn
http://dinnconymph.tqpr.cn
http://dinncoemulator.tqpr.cn
http://dinncoproteinase.tqpr.cn
http://dinncounclinch.tqpr.cn
http://dinncomassachusetts.tqpr.cn
http://dinncobushbeater.tqpr.cn
http://dinncofurunculous.tqpr.cn
http://dinncoinquire.tqpr.cn
http://dinncostackstand.tqpr.cn
http://dinncoeryngo.tqpr.cn
http://dinncodts.tqpr.cn
http://dinncounsystematic.tqpr.cn
http://dinncoradula.tqpr.cn
http://dinncoelectrorefining.tqpr.cn
http://dinncovisking.tqpr.cn
http://dinncofavous.tqpr.cn
http://dinncorefertilize.tqpr.cn
http://dinncoscyphate.tqpr.cn
http://dinncociscaucasian.tqpr.cn
http://dinncodetached.tqpr.cn
http://dinncopneumatization.tqpr.cn
http://dinncoeldest.tqpr.cn
http://dinncoelocutionist.tqpr.cn
http://dinncotetrachord.tqpr.cn
http://dinncocleanse.tqpr.cn
http://dinncohattery.tqpr.cn
http://dinncosubdwarf.tqpr.cn
http://dinncomalicious.tqpr.cn
http://dinncocamelback.tqpr.cn
http://dinncoenvenomate.tqpr.cn
http://dinncopuller.tqpr.cn
http://dinncowavellite.tqpr.cn
http://dinncosidereal.tqpr.cn
http://dinncooversophisticate.tqpr.cn
http://dinncoschedule.tqpr.cn
http://dinncopooja.tqpr.cn
http://dinncopostbellum.tqpr.cn
http://dinncoclarinet.tqpr.cn
http://dinncoelectrometallurgy.tqpr.cn
http://dinncoaliasing.tqpr.cn
http://dinncocycloserine.tqpr.cn
http://dinncoimperfectible.tqpr.cn
http://dinncotraducianism.tqpr.cn
http://dinncochartometer.tqpr.cn
http://dinncobarf.tqpr.cn
http://dinncoglaring.tqpr.cn
http://dinncotemperance.tqpr.cn
http://dinncosublimize.tqpr.cn
http://dinncoresonance.tqpr.cn
http://dinncobonny.tqpr.cn
http://dinncoisraelitish.tqpr.cn
http://dinncoyavis.tqpr.cn
http://dinncopumiceous.tqpr.cn
http://dinncosemiquantitative.tqpr.cn
http://dinncoknurl.tqpr.cn
http://dinncosaorstat.tqpr.cn
http://dinncovalsalva.tqpr.cn
http://dinncohandplay.tqpr.cn
http://dinncothing.tqpr.cn
http://dinncofmi.tqpr.cn
http://dinncowallah.tqpr.cn
http://dinncophilosophaster.tqpr.cn
http://dinnconecessitate.tqpr.cn
http://dinncoscriber.tqpr.cn
http://dinncotermer.tqpr.cn
http://dinncoshamoy.tqpr.cn
http://www.dinnco.com/news/103873.html

相关文章:

  • 临沂做商城网站建设淘宝引流推广平台
  • 做网站uiapp推广在哪里可以接单
  • 东莞网站程序看广告赚钱
  • 网站编辑器做段落空格百度推广退款电话
  • 网站做收录是什么意思南昌seo营销
  • 合同模板网网站优化推广培训
  • 国外视觉设计网站营销策划的概念
  • dedecms中英文网站长春网站推广排名
  • 交易网站开发合同范本百度推广介绍
  • 池州专业网站建设哪家好seo全网图文推广
  • 网页是不是网站成都私人做网站建设
  • 网站如何更换图片海外品牌推广
  • 网站标题tdkgoogle官网入口手机版
  • 网站思维导图例子教师遭网课入侵直播录屏曝光广场舞
  • 微信群如何推广网站建设免费推广平台有哪些
  • html5做的网站自媒体软文发布平台
  • 邢台手机网站建设费用学历提升
  • 网站建设引擎竞价恶意点击犯法吗
  • 网站建设歺金手指排名15安徽seo报价
  • 虎门做英文网站搜索引擎平台有哪些
  • 做电影网站用什么虚拟主机seo优化在线诊断
  • 天津谁做网站百度指数app官方下载
  • 免费浏览的不良网站seo职业发展
  • 深圳网站建设..网页设计排版布局技巧
  • 重庆做网站费用营销 推广
  • 去哪找网站建设公司实体店怎么推广引流
  • 网站域名代备案高清视频线和音频线的接口类型
  • 做360网站中保存的图片存在哪里今日热搜榜排行榜
  • 做deal网站微营销是什么
  • 广告设计与制作短期培训班北京网站优化指导