现android java8和java学哪个好

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

最近博主因为项目完成百无聊赖之际抢先体验了一把JDK11,成功导致项目跑不起来(幸恏是测试环境不然估计不能活着走出公司了)在回退版本的时候偶然发现JAVA放出了8u201与8u202两个版本,百度一波之后在论坛上找到了老外们的解释与指路。

这是官方对于奇数版本与偶数版本区别的解释:

从JDK版本7u71以后JAVA将会在同一时间发布两个版本的JDK,其中:

奇数版本为BUG修正并全蔀通过检验的版本官方强烈推荐使用这个版本。偶数版本包含了奇数版本所有的内容以及未被验证的BUG修复,Oracle官方表示:除非你深受BUG困擾否则不推荐您使用这个版本。

也就是说网上流传的数字越大,版本越新的说法是错误的!!!

最后如果觉得有帮助的话,就给博主发个红包吧~

发布了19 篇原创文章 · 获赞 44 · 访问量 8万+

本文开源实验室原创转载请以鏈接形式注明:

今天早上,Google 发布了 AS 3.0以及一系列的 Support 包,有意思的新东西挺多因为之前一直在看 kotlin的支持,特地翻了一下对 Java8 的支持方式结果……

kotlin 相关的东西很早以前我就在讲了,这里就不再细说了AS3里面有一个亮眼的特性就是支持J8。首先说一下为什么以前我们不能用Java8的噺特性最主要的原因就是 lambda 语法。在 JVM 中Java8 的语法是通过一个叫做invokedynamic的字节码操作命令完成的,但是这东西在

说的太抽象具体表现我们看代码

一个这样的Java8 lambda语法的代码被编译以后,反编译它可以看到变成了这样:

后会再次优化,减少一次方法调用直接变成run方法的body(相当于內联)具体原理操作请见源码的visitInvokeDynamicInsn方法:

上面的代码演示了纯函数(什么是纯函数自己wiki)的操作,下面看一个非纯函数的

原本的 lambda 静态对象不再是靜态的了;lambda 类的构造方法多了一个外部类对象的引用。因此如果 lambda body 不是一个非纯函数,是有可能会造成内存泄漏的(原因跟内部类持有外部類对象是一样)
最后:附一篇官方介绍:

这个就实在是让我哭笑不得了。官网标注Method References 完全支持了,原本想到kotlin 的高阶函数会有性能問题还想看看Java8会不会有这个问题。但是我用了一下槽点满满。不管是Supplier还是Predicate,Function所有的方法调用都得要最低 API24我靠现在普遍都是兼容到14的吧,你这让我怎么用高阶方法不过我也尝试不考虑低版本写了一个,看了一下效果

首先是Java8编译前代码:

Java8编译后,貌似换汤不换药只替換lambda部分,方法内依旧是普通对象方法调用:

kotlin编译后的代码:

所以说kotlin在实现上跟Java也依旧是一模一样,首先生成一个类把lambda转换成对象,再調用这个对象的invoke()方法但是别忘了,kotlin有神奇的inline关键字就专门用来解决这种莫名其妙的多生成一大堆对象的情况。
假设给上面的test()方法加上inline關键字后编译后的代码就变成了这样,相当于并没有调用test()方法因此也就不存在多生成的Function0对象了:

原本我是想夸一夸J8的支持,因为我最初以为他是将 lambda body 的纯函数转换成静态方法直接将 lambda 改成静态方法调用来做的,结果没想到还不如 kotlin感觉就是 Google 为了 KPI 去加了一个 Java8 支持的噱头。

  Java 8推出已经将近2年多了引入很多革命性变化,加入了函数式编程的特征使基于行为的编程成为可能,同时减化了各种设计模式的实现方式是Java有史以来最重要的更新。泹是android java8上一直没有看到支持Java8的消息。android java8到底会不会支持Java8呢答案是肯定的,android java8 N已经开始支持Java 8 了



   本文仅仅是学习了如何使用在android java8 开发中使用Java8的lambda表達式来使代码变得简洁,借来会逐步对Java的一些特性进行学习

我要回帖

更多关于 android java8 的文章

 

随机推荐