面试反杀 | 请谈谈Java8-18引入的新特性(五)

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第10天,点击查看活动详情

Java8于2014年3月18日发布,截止到2022年4月6日,当前最新发行版本是Java18。版本17、11和8是目前支持的长期支持(LTS)版本。这篇文章带领大家回顾从Java 8 开始每个版本的特性,小板凳坐好,发车了!想看上一篇文章,点击这儿面试反杀 | 请谈谈Java8-18引入的新特性(四)

Java 14 新特性

Records

Records是一种受限制的类形式,对于 pojo 来说非常理想。标准的数据载体类将有一些私有字段以及构造函数和 getter/setter。

让我们使用Java 8 语法创建一个有两个成员的简单数据载体类的示例:

public class Location {
    double x;
    double y;
    public Location(double x, double y) {
    this.x = x;
    this.y = y;
    }
    public double getX() {
     return x;
    }
    public double getY() {
     return y;
    }
}
复制代码

我们可以使用下面给出的代码使用 Record 重写上面的类:

record NewLocation(double x, double y) {}
复制代码

Record 将在运行时获取 getter 和构造函数,还将获取 equals ()、 hashcode ()和 toString ()方法。

Helpful Nullpointerexception

在此之前,NullPointerException 的堆栈跟踪没有太多内容可讲,除了给定文件中某一行的某个值为 null。

虽然这些信息很有用,但是它们只是建议调试一行代码,而不是仅仅通过查看日志供开发人员理解。

现在,Java 通过添加指出给定代码行中到底什么是 null 的功能,使得这一过程变得更加容易。

举个空指针的例子:

int[] arr = null;
arr[0] = 1;
复制代码

在以前的版本,运行这段代码时,日志会显示:

Exception in thread "main" java.lang.NullPointerException
at com.baeldung.MyClass.main(MyClass.java:27)
复制代码

但对于Java 14,日志会打印:

java.lang.NullPointerException: Cannot store to int array because "a" is null
复制代码

正如我们可以看到的,现在我们准确地知道是哪个变量导致了异常。

Text Blocks

文本块相较于Java 13,又做了一次升级,现在有了两个新的转义序列,但仍然是预览功能。

  • : 表示行尾,以便不引入新的行字符
  • \s: 表示一个单独的空格

举个例子:

String multiline = "A quick brown fox jumps over a lazy dog; the lazy dog howls loudly.";
复制代码

现在可以写成:

String multiline = """
    A quick brown fox jumps over a lazy dog; \
    the lazy dog howls loudly.""";
复制代码

这提高了字符串的可读性。

当然还有其它的新特性,包括但不限于:

  • Packaging Tool
  • Foreign Memory Access API
  • ZGC on Windows
  • NUMA-Aware Memory Allocation for G1
  • JFR Event Streaming

未完待续,下面继续讲各个版本的新特性,敬请期待!

猜你喜欢

转载自juejin.im/post/7084698526026432548