// JDK8 --> JDK9
try语句的升级
// 不用显式关闭流
try(InputStreamReader reader = new InputReader(System.in)) {
reader.read();
}catch(IOException e) {
e.printStackTrace();
}
下划线使用限制
JDK9中 _ 变为关键字,不能使用下划线作为标识符
String存储结构改变
JDK9之前,字符串使用char数组存放。JDK9之后使用byte数组 + encoding flag(编码格式)
创建只读集合
// 只读集合
List<String> newList = Collections.unmodifiableList(oldList);
Set<String> newSet = Collections.unmodifiableSet(oldSet);
Map<Object, Object> map = Collections.unmodifiableMap(new HashMap<>() {
{
put(1, "1");
put(2, "2");
}
});
// of方法也能创建只读集合
List.of(1,2,3);
增强Stream API
takeWhile()&dropWhile()
- takeWhile不同于filter,该方法遇到不符合的情况就停止,返回不符合条件之前的所有元素。
- dropWhile与takeWhile功能相反,打印结果为88、23、66、1
List<Integer> list = Arrays.asList(10, 2, 5, 88, 23, 66, 1);
list.stream().takeWhile(x -> x<70).forEach(System.out::println);
// 打印结果为 10、2、5
ofNullable()
- jdk8中stream不能完全为null,jdk9中ofNullable允许创建单个空元素的stream
// 比起of健壮性更好
Stream.ofNullable(null);
iterate()
// 0 ~ 9
Stream.iterate(0, x->x+1).limit(10).forEach(System.out::println);
Stream.iterate(0, x->x<10, x->x+1).forEach(System.out::println);
归纳Stream实例化的方法:
- list.stream()
- Arrays
- of() ofNullable()
- iterate()
多分辨率图像API
- api定义在java.awt.image包下
- 将不同分辨率的图像封装到一张多分辨率的图像中,作为它的变体
- 基于屏幕分辨率大小Graphics类可以从MutiResolutionImage接口中获取所需变体
可以类比安卓res包下的多分辨率文件夹的思想
新·HTTP客户端API
HttpClient已经支持HTTP2
HttpClient client = HttpClient.newHttpClient();
HttpRequest req = HttpRequest.newBuilder(URI.create("www.baidu.com")).GET().build();
HttpResponse<String> res = client.send(req, HttpResponse.BodyHandler.asString());
if(res.statusCode()==200) {
System.out.println(res.body());
}
智能java编译工具
sjavac用于在多核处理器的情况下提升JDK的编译速度,并取代javac成为java环境中默认的通用编译工具