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

本文介绍了Java 13的主要特性,包括TextBlocks简化多行字符串表示,以及SwitchExpressions的增强,特别是新增的yield语句。TextBlocks使得嵌入JSON、XML等更方便,而SwitchExpressions则提高了代码的可读性和战略模式的实现效率。除此之外,还提及了DynamicCDSArchives、ZGC: Uncommit Unused Memory等其他更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


theme: orange

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

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

Java 13 新特性

Text Blocks

文本块最小化表示多行字符串所需的 一种Java 语法,它可以用来代替任何按惯例在双引号中添加的字符串。在文本块之前,如果我们必须打印一个多行字符串,我们将需要使用分隔符,连接等。

例如,下面的代码将在一行中给出完整的字符串

System.out.print("Hey There " + "What's up?? " + "How was your vacation?? " + ";)");

输出:

Hey There What's up?? How was your vacation?? ;)

为了在下一行打印它们,我们必须将上面的代码修改为下面给出的代码,

System.out.print("Hey There \n" + "What's up?? \n" + "How was your vacation?? \n" + ";)");

使用文本块,我们可以将上面的代码重写为下面给出的代码,

System.out.print(""" Hey There What's up?? How was your vacation?? ;) """);

文本块也可以用来代替标准字符串。例如,下面显示的两个字符串具有相同的含义:

//Text Block printMsg(""" Print This!! """); // String in Double Quotes printMsg("Print this!");

Switch Expressions (JEP 354)

我们最初在 JDK 12中看到了Switch Expressions。13的Switch Expressions通过添加一个新的 yield 语句在前一版本的基础上构建。

使用 yield,我们现在可以有效地从 switch 表达式返回值:

@Test @SuppressWarnings("preview") public void whenSwitchingOnOperationSquareMe_thenWillReturnSquare() {    var me = 4;    var operation = "squareMe";    var result = switch (operation) {        case "doubleMe" -> {            yield me * 2;       }        case "squareMe" -> {            yield me * me;       }        default -> me;   }; ​    assertEquals(16, result); }

正如我们所看到的,现在很容易实现的战略模式使用新的切换。

Text Blocks

多行字符串的文本块,如嵌入式 JSON、 XML、 HTML 等。

为了将 JSON 嵌入到我们的代码中,我们将它声明为 String literal:

String JSON_STRING  = "{\r\n" + ""name" : "namestr",\r\n" + ""website" : "https://www.%s.com/"\r\n" + "}";

现在让我们使用 String 文本块编写相同的 JSON:

String TEXT_BLOCK_JSON = """ {    "name" : "namestr",    "website" : "https://www.%s.com/" } """;

很明显,没有必要转义双引号或添加回车。通过使用文本块,嵌入的 JSON 更易于编写,更易于阅读和维护。

此外,所有的 String 函数都是可用的:

@Test public void whenTextBlocks_thenStringOperationsWorkSame() {            assertThat(TEXT_BLOCK_JSON.contains("namestr")).isTrue();    assertThat(TEXT_BLOCK_JSON.indexOf("www")).isGreaterThan(0);    assertThat(TEXT_BLOCK_JSON.length()).isGreaterThan(0); }

另外,java.lang.String 现在有三个新的方法来操作文本块:

  • stripIndent ()——模仿编译器去除附带的空白
  • translateEscapes ()-将转义序列(如“ t”)翻译为“ t”
  • Formatted ()-与 String: : : format 的工作方式相同,但用于文本块

让我们快速看一下 String: : : 格式化的例子:

assertThat(TEXT_BLOCK_JSON.formatted("baeldung").contains("www.baeldung.com")).isTrue(); assertThat(String.format(JSON_STRING,"baeldung").contains("www.baeldung.com")).isTrue();

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

  • Dynamic CDS Archives (JEP 350)
  • ZGC: Uncommit Unused Memory (JEP 351)
  • Reimplement the Legacy Socket API (JEP 353)

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值