简介
JDK 11 于2018年9月25日正式发布。作为自java 8 后的首个LTS版本,势必需要了解一下都有哪些新特性。
新特性
本文总结一些贴近实际开发中相关的特性作讨论,并不记录11所有的新特性
源文件直接运行
直接通过 java HelloWorld.java 执行 Java 源代码,不需要手动来编译。
新的工具类 HttpClient
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.baidu.com/"))
.build();
//同步
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
//异步
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
输出:
200
<!DOCTYPE html>
<!--STATUS OK--><html> ...... </html>
<!DOCTYPE html>
<!--STATUS OK--><html> ...... </html>
- 之前版本中的 HttpClient 为尝试版,java 11正式纳入
- Java 11 中,HttpClient 的包名由 jdk.incubator.http 改为java.net.http,并通过CompleteableFuture实现非阻塞
String类增加新api
String s = "\rddd\nrr";
Stream<String> lines = s.lines();
lines.forEach(System.out::println);
String s1="g";
String repeat = s1.repeat(3);
System.out.println(repeat);
String ss=" 9 ";
String strip = ss.strip();
System.out.println(strip);
输出:
ddd
rr
ggg
9
- String strip() 去除前后的空格
- String stripLeading() 去除前面的空格
- String stripTrailing() 去除后面的空格
- boolean isBlank() 判断是否为空,或者只含有空格
- Stream lines() 依据行终止符切割字符串,行终止符:\n,\r,\r\n
- String repeat (int count) 将字符串重复 count 次,返回拼接后的新串
Optional新增api
- isEmpty 判断是否为空
Stream新增api
Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5);
Stream<Integer> newStream = integerStream.takeWhile(x -> x < 4);
newStream.forEach(x -> System.out.println(x));
输出:
1
2
3
- Stream.of() 创建一个流
- takeWhile 从流中一直获取判定器为真的元素,一旦遇到元素为假,就终止处理,优势是不用遍历整个集合就可以获取到想要的数据
- dropWhile 和takeWhile 相反
var类型增强
List<String> list = Arrays.asList("ac", "ad");
String title = list.stream().map((var x) -> x.toUpperCase()).collect(Collectors.joining(" "));
- 可以在 lambda 中使用 var 进行类型推导
- 个人看法实际开发中用处很少
飞行纪录器
商业版 JDK 中一直有一款低开销的事件信息收集工具,也就是飞行记录器(Java Flight Recorder),它可以对 JVM 进行检查、分析、记录等。当出现未知异常时可以通过记录进行故障分析。这个好用的工具在 Java 11 中将开源免费。所有人都可以使用这个功能了。
感兴趣的可以研究一下,实际开发中用的少。
集合转数组
List<String> s = Arrays.asList("ac", "ad");