JDK11的新特性

程序你得看得懂 2024-02-24 03:02:10

JDK 11是自JDK 8以来的又一个LTS版本,是目前全球使用最多的LTS版本之一。它带来了许多新特性和改进,下面列举了一些JDK 11的新特性及相关的代码示例:

字符串API增强:JDK 11增加了一些新的字符串处理方法,如isBlank()、lines()、repeat(n)、strip()等。这些方法可以更方便地处理字符串。例如:String str = " Hello, World! "; boolean isBlank = str.isBlank(); // false,因为字符串不是空白 String stripped = str.strip(); // "Hello, World!",去除首尾空白 String repeated = str.repeat(2); // " Hello, World! Hello, World! ",重复字符串

需要注意的是,strip()方法在JDK 11中实际上是通过String类的stripLeading()和stripTrailing()方法实现的,它们在JDK 11中也是新增的方法。而isBlank()和repeat(n)方法在JDK 11中是直接添加到String类中的。

局部变量类型推断增强:JDK 11中,局部变量类型推断得到了增强,可以使用var关键字来声明局部变量,而不需要显式地指定变量类型。例如:var list = new ArrayList<String>(); // 推断为ArrayList<String>类型 list.add("Hello"); list.add("World");

需要注意的是,var关键字只能用于局部变量声明,不能用于方法返回类型、字段、参数等。

集合转对应类型的数组:在JDK 11中,可以使用toArray(IntFunction<T[]>)方法将集合转换为对应类型的数组。例如:List<String> list = Arrays.asList("a", "b", "c"); String[] array = list.toArray(String[]::new); // 转换为String类型的数组数据流Streams API增强:JDK 11对Streams API进行了一些增强,包括增加了Stream.ofNullable(T t)、dropWhile(Predicate<? super T> predicate)、takeWhile(Predicate<? super T> predicate)等方法。这些方法可以更方便地处理数据流。例如:Stream<String> stream = Stream.of("a", "b", "c", null, "e"); Stream<String> nonNullStream = Stream.ofNullable(stream); // 这里有误,应直接对stream进行处理 Long count = nonNullStream.filter(Objects::nonNull).count(); // 计算非空元素的数量

需要注意的是,上面的代码中Stream.ofNullable(stream)是有误的,应该直接对stream进行处理,因为Stream.ofNullable(T t)方法是用于创建一个可能为空元素的流,而不是将已有的流包装成可能为空元素的流。

新的Epsilon垃圾收集器:JDK 11引入了一个新的垃圾收集器Epsilon,它是一个完全被动的垃圾收集器,只会处理内存分配,不会实现任何实际的内存回收。Epsilon垃圾收集器的主要用途是用于性能测试和内存压力测试。

以上是JDK 11的一些新特性和相关的代码示例,需要注意的是,这些特性和方法可能会在不同的JDK版本中有所变化,具体使用时需要参考官方文档和API规范。同时,JDK 11还引入了许多其他的新特性和改进,如Nest-Based Access Control、Dynamic Class-File Constants等,这里只列举了一些常用的特性和方法。

0 阅读:2

程序你得看得懂

简介:感谢大家的关注