该如何从 Java 8 升级到 Java 10

栏目: 编程语言 · Java · 发布时间: 6年前

内容简介:Java 9 出来了很久,买的书《Java 9 Revealed - For Earyly Adoption and Migration》,说怎么迁移到 Java 9,可是突然间 Java 9 就无法通过正常渠道从 Oracle 官网下载了,这书还让不让人看。当然要看,因为尽管 Java 10 出来了,但实际的变化全压在 Java 9 这个版本上的,就当是通过 Java 10 来学习 Java 9 吧。本文随便说说 Java 8 之后的版本变迁,不涉及 Java 9 或是 Java 10 的具体新特性,并

Java 9 出来了很久,买的书《Java 9 Revealed - For Earyly Adoption and Migration》,说怎么迁移到 Java 9,可是突然间 Java 9 就无法通过正常渠道从 Oracle 官网下载了,这书还让不让人看。当然要看,因为尽管 Java 10 出来了,但实际的变化全压在 Java 9 这个版本上的,就当是通过 Java 10 来学习 Java 9 吧。

本文随便说说 Java 8 之后的版本变迁,不涉及 Java 9 或是 Java 10 的具体新特性,并不能回答标题中的问题。作为一个不甘落后的 IT 从业人员,总是希望能紧跟技术(某一狭小特定领域的技术)的步伐。譬如说当从 Java 1.4 升级到 Java 1.5 之后,对范型也是跃跃欲试,无奈当时公司追求的是稳定压倒一切,不在服务器上升级 JDK,所以只能创造条件也要上。于是弄了个 Retrotranslator让你用JDK1.5的特性写出的代码能在JVM1.4中运行 来适配。

后来的公司,也就是现在更为激进一些,来了 JDK 6,跟; JDK 7,跟; JDK 8, 继续跟; JDK 9 发布后,不跟了。不是不想跟,而是 Java 9 实在是变化有点大,模块化带来的不仅仅语言方面的改变,而是影响到如何组织,发布应用,这也就是为什么 jigsaw 雪藏多年的缘故。其实也可以对模块化不欲理会,但是单纯的把 Java 8 换成 Java 9 造成原来的项目不能正常构建的概率也比以往要高。

Java 8 是 2014 年 3 月发布,四后半后的 Java 9 在 2017 年 9 月发布,然而 2018 年 3 月 Java 10 就出来了。谁说 Oracle 在收购 Java 后就对它不作为了呢?Oracle 在 Java 9 之后开始了 6 个月的发布周期(见 Oracle Java SE Support Roadmap ),这让人如何受得了,Oracle 自己也是。更何况我们都没来得急品尝 Java 9 的滋味,Oracle 自己就把 Java 9 的生命周期给结束了,进到 Java 9 的下载而面 Java SE 9 Downloads , 自动会导向到 Java SE 10 的下载页面,想要下载 Java SE 9 的话,只能到历史存档中去找 Java SE 9 Archive Downloads

Oracle 自然意识到从 Java 8 更上一层楼需要一个漫长的过程,所以它把对 Java 8 的支持延长到了 2025 年 3 月(中国制造?)。用不上 Java 9 是不是该直接跳到 Java 10 去,恐怕我们还是赶不上,因为 Java 10 也不是一个长期支持版(LTS),即将于 2018 年 9 月出品的 Java 11 才会是一个 LTS 版,它预计支持到 2026 年 9 月,命并不比 Java 8 长多少。

限制我们从 Java 8 往前进的还有一个很大的因素是目前各类云平台的跟进也缓慢,例如 AWS 的 Lambda 仍然只支持到 Java 8,如果是 ECS 上运行的服务我们是可以自己控制的。

如果在 Java 8 原地踏步时间太久了,离现实世界将会渐行渐远。目前只能稍稍对 Java 9 和 Java 10 的一些新特性保持稍微的敏感度,届时有可能直接从 Java 8 一个大跨步到 Java 11 或更高的版本,真要小心蛋了。下面是 Java 8 后两个版本主要的新特性

Java 9: 模块化(最难啃的),jlink(创建自定义镜像),JShell(产品中也用不着),改进的 Javadoc(也不是我主要关心的),集合工厂方法,改进的 Stream API,接口中可有私有方法,HTTP/2,统一的日志,多版本兼容的 Jar 包,等等

Java 10: 能感知到的新特性也就只有一个 var 对局部变量进行类型推断,这是我一直向往着的特性,因为 Scala 中一直这么用, C# 中也早就有了

相信 Java 11 中也不会带来太显著的特性,基本上是停留下来消化 Java 9 引进来的新特性。从此看来,似乎阻碍 Java 8 向新版本升级的最大障碍就是模块化了。

因为 Java 9 的离世,所以为了体验 Java 9 带来的新特性,我们可以直接安装 Java 10。固执一点的话也可以从故纸堆中翻出 Java 9 来体验它的原滋原味,我还真就打算这么做。本文不讲具体的新特性,只从大处着眼看 Java 9 较之以前的不同之处。

首先是安装 JDK 后的目录文件的变化,以 Linux 版本的 Java 8 与 Java 9 为例,其他平台应该类似

该如何从 Java 8 升级到 Java 10

以前的 db 和 jre  目录不见了,而新增了 jmods 目录,并且 src.zip 和  javafx-src.zip 源文件也没带。而且 Java 9 的 lib 中的内容远比 Java 8 的 lib 目录丰富

该如何从 Java 8 升级到 Java 10

再就是 Java 9 后独有的 jmods 目录

该如何从 Java 8 升级到 Java 10

可见 Java 9 的模块要求的对目录中每一个模块的精细划分, jlinkjimage 才得经从中拣出需要的模块构建自己的 Java 运行镜像,想像一下一个服务端程序为何带着 AWT, SWING, JavaFX 等包呢?当然 headless 的程序除外。

也有必要瞧瞧 /bin 目录中的不同

该如何从 Java 8 升级到 Java 10

Java9 新增的命令有 jlink, jimage, jhsdb, jshell, jmod, jdeprscan, jaotc, jweblauncher。 但去除了 native2ascii 命令,在 UTF-8 几乎一统江湖的情况下真是用不着。

字节码中的主版本号严格的往上递增,在 class 文件的第6, 7 字节

  • Java SE 10 = 54 (0x36)
  • Java SE 9 = 53 (0x35)
  • Java SE 8 = 52 (0x34)
  • Java SE 7 = 51 (0x33)
  • Java SE 6 = 50 (0x32)
  • Java SE 5 = 49 (0x31)
  • JDK 1.4 = 48 (0x30)
  • JDK 1.3 = 47 (0x2F)
  • JDK 1.2 = 46 (0x2E)
  • JDK 1.1 = 45 (0x2D)

接下应该要进一步了解其他的一些 Java 9 新特性,很难从模块化先下嘴,会先从语法层面开始。


以上所述就是小编给大家介绍的《该如何从 Java 8 升级到 Java 10》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Host Your Web Site In The Cloud

Host Your Web Site In The Cloud

Jeff Barr / SitePoint / 2010-9-28 / USD 39.95

Host Your Web Site On The Cloud is the OFFICIAL step-by-step guide to this revolutionary approach to hosting and managing your websites and applications, authored by Amazon's very own Jeffrey Barr. "H......一起来看看 《Host Your Web Site In The Cloud》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码