JAVA11

概述:jdk11是在2018年9月26日发布,

Java11将带来ZGC、HttpClient等重要特性;Java11的ZGC比G1的垃圾回收性格更强,不超过10ms的GC暂停。

安装:

下载地址:https://www.oracle.com/java/technologies/downloads/archive

同JDK8、9安装步骤一样,安装好之后,记得配置环境变量就可以;

查看java版本

java -version

新特性

jShell脚本

命令行模式下,进行创建文件、声明类、提供单元测试方法。打开帮助文档 /help

 

 

集合中新的API

// jdk8 之前写法 创建只读的
List<Integer> list1 = Collections.unmodifiableList(Arrays.asList(1, 3, 4));
Set<Integer> set1 = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(1, 3, 4)));
Map<Object, Object> map1 = Collections.unmodifiableMap(new HashMap<>() {{
   put("Tom", 19);
   put("Tim", 25);
}});
// map1.forEach((k, v) -> System.out.println(k + " -> " + v));
​
// jdk9 的写法:创建只读的集合
List<Integer> list2 = List.of(1, 3, 4);
Set<Integer> set2 = Set.of(2, 3, 4);
Map<String, Integer> map2 = Map.of("Tom", 12, "Jom", 23);
Map<String, Integer> map3 = Map.ofEntries(Map.entry("TT", 14), Map.entry("MK", 39));

StreamAPI

List<Integer> lsit1 = Arrays.asList(1, 3, 4, 6, 2);
// takeWhile 从开头开始获取满足的元素,直到不满足为止
List<Integer> c1 = lsit1.stream().takeWhile(x -> x < 3).collect(Collectors.toList());
System.out.println(c1); // 结果是 3
​
// dropWhile 与takeWhile相反,取出不满足的,直到满足为止
List<Integer> c2 = lsit1.stream().dropWhile(x -> x < 3).collect(Collectors.toList());
System.out.println(c2); // 结果是 3
​
// ofNullable
Stream<Object> o1 = Stream.ofNullable(null);
long count = o1.count(); // 结果是0  不会出现异常
System.out.println(count);

字符串

// 判断字符串字符是否都是空
String str = " abc ";
System.out.println(str.isBlank());
// 去除字符串首尾空白
System.out.println(str.strip());
System.out.println(str.trim());
// 去除首部的字符串空格
System.out.println(str.stripLeading());
// 去除尾部的字符串空格
System.out.println(str.stripTrailing());
// 复制字符串
str2 = str2.repeat(3);
System.out.println(str2); // abc abc abc
// 行数统计
long count = str2.lines().count();
System.out.println(count); // 1行

Optional

// ofNullable 支持存空 如果值为null,取默认值,不会报空指针
String name = (String) Optional.ofNullable(null).orElse("默认值");
// orElseGet 与 orElse的区别,orElseGet可以定义逻辑补充
String name2 = (String) Optional.ofNullable(null).orElseGet(() -> "默认值 - 可以有一些操作");
System.out.println(name2);
// 如果值为空,会报错异常 - 指定异常 (没有不会出现异常)
try {
    String name3 = (String)  Optional.ofNullable(null).orElseThrow(() -> new Exception("指定异常"));
} catch (Throwable throwable) {
    throwable.printStackTrace();
}

InputStream 加强

InputStream API增加一个transferTo方法,可以用来将数据直接传输到OutputStream,文件复制。

Http 客户端

// 异步请求
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder(URI.create("http://goodysr.cn/")).build();
HttpResponse.BodyHandler<String> stringBodyHandler = HttpResponse.BodyHandlers.ofString();
CompletableFuture<HttpResponse<String>> future = client.sendAsync(request, stringBodyHandler);
HttpResponse<String> response =  future.get();
// 返回结果
String body = response.body();
​
// 同步请求
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder(URI.create("http://goodysr.cn/")).build();
HttpResponse.BodyHandler<String> stringBodyHandler = HttpResponse.BodyHandlers.ofString();
HttpResponse<String>  send = client.send(request, stringBodyHandler);
String body = send.body();

垃圾回收

ZGC垃圾回收,垃圾回收暂停(也就是把程序全部线程先暂停,此时间越长,影响程序越大)时间不超过10ms,支持TB级内存容量,只支持64位系统;