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

本专栏的目的是收集全网最优秀的文章,供Java程序员成长,若有侵权,请联系我们删除。

最近,逛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 = "\n" +

"

\n" +

"

Hello, world

\n" +

" \n" +

"\n";

新写法如下:

String html = """

Hello, world

""" ;

# 总结

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的尝鲜版本。

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

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

逃逃逃~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值