内容简介:随着JDK11正式发布,带来了许多新的特性。本文主要介绍JDK11的部分新特性和新的API。在Lambda表达式中,可以使用例如:
随着JDK11正式发布,带来了许多新的特性。本文主要介绍JDK11的部分新特性和新的API。
Local Var
在Lambda表达式中,可以使用 var
关键字来标识变量,变量类型由编译器自行推断。
例如:
// LocalVar.java package com.itranswarp.jdk11; import java.util.Arrays; public class LocalVar { public static void main(String[] args) { Arrays.asList("Java", "Python", "Ruby") .forEach((var s) -> { System.out.println("Hello, " + s); }); } }
HttpClient
长期以来,如果要访问Http资源,JDK的标准库中只有一个 HttpURLConnection
,这个古老的API使用非常麻烦,而且已经不适用于最新的HTTP协议。
JDK11的新的HttpClient支持HTTP/2和WebSocket,并且可以使用异步接口:
// HttpApi.java package com.itranswarp.jdk11; import java.net.URI; import java.net.http.HttpClient; import java.net.http.HttpRequest; import java.net.http.HttpResponse; import java.util.concurrent.CompletableFuture; public class HttpApi { public static void main(String[] args) { HttpRequest request = HttpRequest.newBuilder().uri(URI.create("https://www.qq.com/")).GET().build(); HttpResponse.BodyHandler<String> bodyHandler = HttpResponse.BodyHandlers.ofString(); HttpClient client = HttpClient.newHttpClient(); CompletableFuture<HttpResponse<String>> future = client.sendAsync(request, bodyHandler); future.thenApply(HttpResponse::body).thenAccept(System.out::println).join(); } }
List API
对于 List
接口,新增了一个 of(T...)
接口,用于快速创建 List
对象:
List<String> list = List.of("Java", "Python", "Ruby");
List
的 toArray()
还新增了一个重载方法,可以更方便地把 List
转换为数组。可以比较一下两种转换方法:
// 旧的方法:传入String[]: String[] oldway = list.toArray(new String[list.size()]); // 新的方法:传入IntFunction: String[] newway = list.toArray(String[]::new);
读写文件
对 Files
类增加了writeString和readString两个静态方法,可以直接把String写入文件,或者把整个文件读出为一个String:
Files.writeString( Path.of("./", "tmp.txt"), // 路径 "hello, jdk11 files api", // 内容 StandardCharsets.UTF_8); // 编码 String s = Files.readString( Paths.get("./tmp.txt"), // 路径 StandardCharsets.UTF_8); // 编码
这两个方法可以大大简化读取配置文件之类的问题。
String API
String
新增了 strip()
方法,和 trim()
相比, strip()
可以去掉Unicode空格,例如,中文空格:
String s = " Hello, JDK11!\u3000\u3000"; System.out.println(" original: [" + s + "]"); System.out.println(" trim: [" + s.trim() + "]"); System.out.println(" strip: [" + s.strip() + "]"); System.out.println(" stripLeading: [" + s.stripLeading() + "]"); System.out.println("stripTrailing: [" + s.stripTrailing() + "]");
输出如下:
original: [ Hello, JDK11! ] trim: [Hello, JDK11! ] strip: [Hello, JDK11!] stripLeading: [Hello, JDK11! ] stripTrailing: [ Hello, JDK11!]
新增 isBlank()
方法,可判断字符串是不是“空白”字符串:
String s = " \u3000"; // 由一个空格和一个中文空格构成 System.out.println(s.isEmpty()); // false System.out.println(s.isBlank()); // true
新增 lines()
方法,可以非常方便地按行分割字符串:
String s = "Java\nPython\nRuby"; s.lines().forEach(System.out::println);
新增 repeat()
方法,可以指定重复次数:
System.out.println("-".repeat(10)); // 打印----------
除了新增的API外,JDK11还带来了EpsilonGC,就是什么也不做的GC,以及ZGC,一个几乎可以做到毫秒级暂停的GC。ZGC还处于实验阶段,所以启动它需要命令行参数 -XX:+UnlockExperimentalVMOptions -XX:+UseZGC
。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- MongoDB 4.2 新特性解读
- Java 11正式发布,新特性解读
- Python 3.8 新特性全面解读
- Python 3.8 发布,新特性解读
- 解读 MySQL 8.0 新特性:CTE
- 拥抱变化 —— Istio 1.5 新特性解读
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Creative Selection
Ken Kocienda / St. Martin's Press / 2018-9-4 / USD 28.99
Hundreds of millions of people use Apple products every day; several thousand work on Apple's campus in Cupertino, California; but only a handful sit at the drawing board. Creative Selection recounts ......一起来看看 《Creative Selection》 这本书的介绍吧!
CSS 压缩/解压工具
在线压缩/解压 CSS 代码
JSON 在线解析
在线 JSON 格式化工具