JDK/Java 14 可能带来什么新特性?

2019年10月11日

JDK/Java 13 在一个月前已经发布,该版本带来了 5 大新特性,笔者观察到其中的 Text Blocks(文本块)特性似乎被讨论最多。文本块特性与常见的 Python """any input""" 特性一样,它支持多行字符串文字,可以不需要使用大多数转义序列,同时可以让开发人员控制格式。虽然这不是特别复杂的特性,但对于开发中想将 HTML 代码引入 Java 来说是极大的便利,代码可读性也极大提高。

关于 Java 13 的其它新特性这里不赘述,感兴趣的话可以看看文末推荐的几篇内容。这里想写的其实是:按照惯例,可以开始盯着 Java 14 的新特性了。

JDK 14 现在处于 Early-Access(EA,早期访问)阶段,按照发布周期正式版本将于明年 3 月 17 日发布。

目前最新版本是 build 17,各个 build 的更新说明可以查看:https://jdk.java.net/13/release-notes

本文引用 InfoWorld 的报导,介绍一下目前 JDK 14 中可能会出现的 3 项新特性。其中有两个特性被正式提了出来,还有一个特性则是预测性质,分别看看:

  • 改进 NullPointerExceptions,通过准确描述哪些变量为 null 来提高 JVM 生成的异常的可用性。该提案的作者希望为开发人员和支持人员提供有关程序为何异常终止的有用信息,并通过更清楚地将动态异常与静态程序代码相关联来提高对程序的理解。
  • 非易失性映射的字节缓冲将添加新的 JDK 特定文件映射模式,该模式允许 FileChannel API 用于创建引用非易失性内存(NVM)的 MappedByteBuffer 实例。NVM 使开发者可以跨程序构建和更新程序状态,而不会产生输入和输出操作通常需要的大量复制和翻译成本,这对于交易程序而言尤其重要。该增强提案主要目标是确保客户端可以连贯有效地从 Java 程序访问和更新 NVM;第二个目标是使用 Unsafe 类中定义的受限制 JDK 内部 API 来实现此提交行为,因此可以由可能需要提交给 NVM 的 MappedByteBuffer 之外的其它类重用;另一个目标是允许现有 API 跟踪在 NVM 上映射的缓冲区,以进行监控和管理。
  • Switch Expressions 在 JDK 12 与 13 中都是预览状态,预计在 JDK 14 中成为稳定特性。switch 表达式扩展了 switch 语句,使其不仅可以作为语句(statement),还可以作为表达式(expression),并且两种写法都可以使用传统的 switch 语法,或者使用简化的“case L ->”模式匹配语法作用于不同范围并控制执行流。这些更改将简化日常编码工作,并为 switch 中的模式匹配(JEP 305)做好准备。

JDK 14 EA 版本下载地址:https://jdk.java.net/13

最后,需要注意的是 EA 阶段的特性也有可能永远不会出现在最终的 JDK/Java 14 正式 GA 版本中。

回到本文开头,关于 Java 13 的相关内容:

展开阅读全文
13 收藏
分享
加载中
精彩评论
放心,中国的javaer 还会继续打磨jdk8,java8之后再无java
2019-10-11 09:05
59
举报
万年java8
2019-10-11 08:50
16
举报
jdk哪个版本没有gc的优化?这是选择性看不见呀
2019-10-11 19:49
6
举报
直接编译也是有局限性的. 编译成最终机器码了就意味着很难再实现动态生成代码进行编译链接,高度优化的反射,运行时采集信息的JIT优化. 安卓现在是二者各有取舍. 至于安卓的内存问题主要是后台常驻服务太多,Java的JIT并不是主要原因.
2019-10-14 12:20
4
举报
JVM发展这么多年了,有效的优化手段基本用尽,已接近优化极限,现在的更新即使还有点性能提升也不值一提了.
2019-10-11 14:12
4
举报
最新评论 (95)
万年8
2020-01-12 23:44
0
回复
举报
java8,在国内也是花N的才切过来的。 之后的版本,虽说很多新的特性,但有那个精力 , 可以考虑学习Go。
2020-01-12 23:04
0
回复
举报
简称 j8
2019-10-18 10:14
2
回复
举报
是不是一直用最新版,就能一直免费了?机智如我。
2019-10-18 10:11
0
回复
举报
别java8不java8了, 你们的BOSS让你用几就是几
2019-10-18 09:49
1
回复
举报
还有java6的呢
2019-10-18 09:36
1
回复
举报
JAVA20的时候,我还是用Java8
2019-10-18 08:41
2
回复
举报
fiber有没有
2019-10-17 19:35
0
回复
举报
如果能在Java8更新里加上Text块和去除setter&getter就好了
2019-10-14 09:57
0
回复
举报
lombok了解一下,可以去掉setter getter
2019-10-17 11:00
0
回复
举报
这只是插件帮你get set了 并不是去除
2019-10-17 11:16
0
回复
举报
反正不用写了
2019-10-17 20:45
0
回复
举报
去除setter&getter难道不是直接public就解决了?
2019-10-17 15:49
1
回复
举报
要对扩展开放,对修改关闭,直接public可扩充性不好。对实体的属性修改,要控制在实体类里,而不是外界,也就是说通过getter/setter做一个隔离,比方说触发一个字段修改事件。但是95%情况下业务开发是没有用到这个可扩充性,只用到了它的隔离性。这时候就要考虑怎样简化语法,减轻这95%的程序员打字负担,提高开发效率了,可以考虑引入新的关键字,举例来说可以用以下声明代表实体直接具备getter/setter方法:
private# String address;
这种方式不影响可扩充性,可以手工增加getter/setter方法来覆盖缺省getter/setter。而且也不会对旧程序产生兼容性问题,因为#是非法字符,在旧版Java中是不能编译通过的。
我一直很喜欢java,但是对于它不支持多行文本以及繁琐的getter/setter深恶痛绝,Java语言开发者没有get到业务开发的痛点。
Lombok的问题是不权威,不通用,有些情况不适用,例如在JSP或GoSqlGo这种需要动态编译Java的地方就不能用。
2019-10-17 23:15
0
回复
举报
一般纯数据类, 我都是通过简单的描述文件去生成类, 包括所有的getter/setter(可配置final字段不生成setter), equals, hashCode, toString, clone, compareTo等等. 非纯数据的类, getter/setter的方法并不多, 所以一直没对这个问题感觉繁琐.
2019-10-18 10:03
0
回复
举报
别人都用Java8,你敢用Java11?给别人打包搞死你,到最后大家都是Java8,万年Java8。。。
2019-10-13 09:46
1
回复
举报
对啊 头皮发麻,都是从之前的老项目copy过去,烦....
2019-10-17 14:51
0
回复
举报
更多评论
95 评论
13 收藏
分享
返回顶部
顶部