Java 每半年就会更新一次新特性,再不掌握就要落伍了:Java11 的新特性

Java11作为长期支持版,带来了增强的API,如String的repeat、strip系列方法,新的HTTP客户端,集合操作优化,函数Predicate增强等。此外,还有ZGC低延迟垃圾收集器,飞行记录器等工具,进一步提升了性能和开发体验。
摘要由CSDN通过智能技术生成

从 2017 年开始,Java 版本更新策略从原来的每两年一个新版本,改为每六个月一个新版本,以快速验证新特性,推动 Java 的发展。从 《JVM Ecosystem Report 2021》 中可以看出,目前开发环境中有近半的环境使用 Java8,有近半的人转移到了 Java11,随着 Java17 的发布,相信比例会有所变化。

因此,准备出一个系列,配合示例讲解,阐述各个版本的新特性。

概述

Java11 是 2018 年 9 月发布的,是自 Java8 之后第一个长期支持版(long-term support,LTS)。相比于其他版本 6 个月维护期,长期支持版的维护期是 3 年。

长期支持版的更新会比较多,而且都是相对稳定的更新。今天我们就一起看看 Java11 都有哪些喜人的变化:增强的 API、全新的 HTTP 客户端、基于嵌套关系的访问控制优化、低开销的堆性能采用工具、ZGC、Epsilon 垃圾收集器、飞行记录器等。

增强 String

首先说下String中新增的方法:repeatstripstripLeadingstripTrailingisBlanklines。这些方法还是挺有用的,以前我们可能需要借助第三方类库(比如 Apache 出品的 commons-lang)中的工具类,现在可以直接使用嫡亲方法了。

repeat

repeat是实例方法,顾名思义,这个方法是返回给定字符串的重复值的,参数是int类型,传参的时候需要注意:

  • 如果重复次数小于 0 会抛出IllegalArgumentException异常;
  • 如果重复次数为 0 或者字符串本身是空字符串,将返回空字符串;
  • 如果重复次数为 1 直接返回本身;
  • 如果字符串重复指定次数后,长度超过Integer.MAX_VALUE,会抛出OutOfMemoryError错误。

用法很简单:

@Test
void testRepeat() {
    String output = "foo ".repeat(2) + "bar";
    assertEquals("foo foo bar", output);
}

小而美的一个工具方法。

strip、stripLeading、stripTrailing

strip方法算是trim方法的增强版,trim方法可以删除字符串两侧的空白字符(空格、tab 键、换行符),但是对于Unicode的空白字符无能为力,strip补足这一短板。

用起来是这样的:

@Test
void testTrip() {
    final String output = "\n\t  hello   \u2005".strip();
    assertEquals("hello", output);

    final String trimOutput = "\n\t  hello   \u2005".trim();
    assertEquals("hello   \u2005", trimOutput);
}

对比一下可以看到,trim方法的清理功能稍弱。

stripLeadingstripTrailingstrip类似,区别是一个清理头,一个清理尾。用法如下:

@Test
void testTripLeading() {
    final String output = "\n\t  hello   \u2005".stripLeading();
    assertEquals("hello   \u2005", output);
}

@Test
void testTripTrailing() {
    final String output = "\n\t  hello   \u2005".stripTrailing();
    assertEquals("\n\t  hello", output);
}

isBlank

这个方法是用于判断字符串是否都是空白字符,除了空格、tab 键、换行符,也包括Unicode的空白字符。

用法很简单:

@Test
void testIsBlank() {
    assertTrue("\n\t\u2005".isBlank());
}

lines

最后这个方法是将字符串转化为字符串Stream类型,字符串分隔依据是换行符:\n\r\r\n,用法如下:

@Test
void testLines() {
    final String multiline = "This is\n \na multiline\nstring.";
    final String output = multiline.lines()
            .filter(Predicate.not(String::isBlank))
            .collect(Collectors.joining(" "));
    assertEquals("This is 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值