查看原文
其他

JDK14最新号外,你又有面试吹牛逼的资本了,别不信...

忆蓉之心 Java面试那些事儿 2019-12-19


最近,逛dzone的时候,看到一位老外写了一篇文章,说 Mark Reinhold 为JDK14提交了5个JEP建议(不一定会出现在JDK14中)。编号分别是 305, 343, 359, 366, 368。


接下来,我就带着你来盘他,达到面试吹牛逼的目的。

为什么这么说呢?因为无论大小厂都希望高p候选人对技术永远保持着前瞻性和好奇感,然而,你进去后,才发现接手的大多数项目还在JDK8,甚至有的项目还在JDK7(刚好14的一半^_^)。如果你身边都是一群积极上进的小伙伴,说不定在你的带动下,还真能推动,要是身边都是一群老油条,你还没推动起来,你却因不合群而被他们踢出局了。


我们先来聊聊这位大佬Mark Reinhold是谁?

他是JDK 1.2和5.0版本的首席工程师,Java SE 6的规范制定的负责人,还是JDK 7,JDK 8和JDK 9 项目和规范的负责人,目前,他主要在OpenJDK社区领导JDK项目,归根结底,两个字:牛逼。


好了,我们回归到正文,来拆解一下这5个JEP。


首先,建议读一读之前的一篇文章,JDK的发展史:它,是一部全网最全的JDK发展历史轨迹图...


说明一下JDK14目前还在开发中,估计正式发布还需要等好几个月,来看一下Mark Reinhold邮件里的发布计划(具体发布时间见红框):


5个针对性的JEP建议分别是:


1、JEP305:instanceof的模式匹配;

2、JEP343:打包工具;

3、JEP359:record关键字;

4、JEP366:弃用Parallel Scavenge+Serial Old垃圾收集算法的组合

5、JEP368:文本块。


# JEP305:instanceof的模式匹配


这个功能是对instanceof关键字加强,通过模式匹配来简化逻辑,使得操作更简单,比如下面两种写法。


我们熟悉的写法:

if (obj instanceof String) {String s = (String) obj;// use s}

新的写法:


突出了绑定变量的范围是由包含的表达式和语句的语义确定,下面这种写法,如果obj是String类型,那么s可以在true代码块中使用,但在else代码块中不能使用s变量。

if (obj instanceof String s) {// 这里可以使用s变量} else {// 这里不可以使用s变量}

又比如下面这种写法:

if (!(obj instanceof String s)) { .. s.contains(..) ..} else { .. s.contains(..) ..}

上面这种写法,true代码块中s引用的是obj;false代码块中s引用的是绑定变量。


同样,它还能与&& ||操作符一起使用,比如:

if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}
if (obj instanceof String s || s.length() > 5) {.. s.contains(..) ..}

说白了,就一个目的:简化逻辑,丰富instanceof的语义。


# JEP343:打包工具


这个没有什么说的,说白了就是提供一种跨平台的打包工具,支持的平台分别是:


Linux: deb and rpm

macOS: pkg and dmg

Windows: msi and exe


# JEP359:record关键字


这个record关键字的语义,是简化bean,省略掉繁琐的构造函数、equals()、hashCode()、toString()等,如下面这种格式:

record Point(int x, int y) { }

跟Lombok有点类似,之前有篇文章介绍过(参考:工具:IDEA必备的利器Lombok,减少代码冗余神器。),这个Lombok工具实际上只是给了你一种没有写这些函数的假象,背后它默默帮你做了,它是怎么做的呢?它会在编译期动手脚,将相应的功能注入到jar包。这个record关键字到底会怎么做,就不得而知了。


JEP366:弃用Parallel Scavenge+Serial Old垃圾收集算法的组合


通过邮件得出的大概意思,就是这个GC算法的组合很少使用,但需要大量维护工作,因此弃用。


# JEP368:文本块


这个特性对应JDK13中JEP 355: Text Blocks (Preview)的补充(参考:用这种方式学习JDK 13新特性,真easy...),但我不论怎么看,都觉得跟Python有点像,我挺期待这个功能,之前字符串处理方法的,转义太烦了,可读性太差了!


简单举例说明一下,老写法:

String html = "<html>\n" +" <body>\n" +" <p>Hello, world</p>\n" +" </body>\n" +"</html>\n";

新写法如下:

String html = """ <html> <body> <p>Hello, world</p> </body> </html> """             ;


# 总结


JDK14到底有那些新功能呢?


可以确定的JEP如下:


  • JEP 345: NUMA-Aware Memory Allocation for G1

  • JEP 349: JFR Event Streaming

  • JEP 352: Non-Volatile Mapped Byte Buffers

  • JEP 358: Helpful NullPointerExceptions

  • JEP 361: Switch Expressions (Standard)

  • JEP 363: Remove the Concurrent Mark Sweep (CMS) Garbage Collector

  • JEP 364: ZGC on macOS

  • JEP 367: Remove the Pack200 Tools and API


待确认的5个JEP建议:


  • JEP 305: Pattern Matching for instanceof (Preview)

  • JEP 343: Packaging Tool (Incubator)

  • JEP 359: Records

  • JEP 366: Deprecate the ParallelScavenge + SerialOld GC Combination

  • JEP 368: Text Blocks (Second Preview)


最后,你可以获取JDK14的尝鲜版本。

官网:http://jdk.java.net/14/


你要用正式版,唯一能做的就是默默等待...


兄弟,我敢打赌你们还有部分项目还在JDK7,要是JDK14出来了,它们之间可是差了一倍哦!

逃逃逃~~~


热文推荐

程序员开发了一款软件,完成了舔狗的绝地反杀(代码开源)!

作为 IT 行业的过来人,你有什么话想对后辈说的?

老王说,徒手撸一个简单版的Redis不难,我不信...





觉得不错,请给个「在看」

分享给你的朋友!


- End -


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存