智能网 系统知识 少儿编程cl|少儿编程c语言面试题

少儿编程cl|少儿编程c语言面试题

Java8中引入的lambda是怎么实现的呢?很多人初次使用的时候感觉很像匿名内部类,但是生成的class文件中又找不到内部类,这是怎么回事呢?首先lambda确实很像匿名内部类,自动实现一个接口的抽象方法;其次Java内部确实也生成了一个。

接下来小编给大家简单介绍一下少儿编程cl,希望能帮助到您,更多相关请关注本网站。

Java8中引入的lambda是怎么实现的呢?很多人初次使用的时候感觉很像匿名内部类,但是生成的class文件中又找不到内部类,这是怎么回事呢?

首先lambda确实很像匿名内部类,自动实现一个接口的抽象方法;其次Java内部确实也生成了一个内部类,只不过是在JVM运行时生成的。

代码编译为class文件后,lambda方法会生成一个私有静态方法,包装lambda的代码逻辑,而不是直接生成内部类;运行时需要执行lambda方法时,Java通过invokedynamic指令生成实现接口的内部类,并在实现方法中调用前边生成的私有静态方法。

少儿编程cl|少儿编程c语言面试题

那么为什么不直接在编译时生成内部类呢?这里有两个考虑:

一是生成到class文件中就不方便以后调整了,虽然现在是内部类的方式,但以后是不是可以直接访问一个没有绑定类的函数,就像golang一样。放到JVM中进行优化的时候就很方便了,不用重新编译代码,直接升级JVM即可。

二是可以减少字节码的代码量,编译的时候少生成点代码,自然打包文件的大小也会少很多,这对于存储和传输都是有益的,更小更快谁不喜欢呢。特别是Scala这种大量融合了函数式编程范式的语言。

少儿编程cl文章到此结束,字数约832字,希望可以帮助到大家。

免责声明:智能网所有文字、图片等资料仅提供信息存储空间服务,旨在传递更多信息,不拥有所有权,不承担相关法律责任,如有问题,请联系我们删除。此文章链接:https://www.fcc0.com/xitong/62673.html
返回顶部