从Java 9 到 Java 17 新特性梳理
Java 9
-
新的创建集合的方法
// [1, 2, 3, 4]
List<Integer> integers = List.of(1, 2, 3, 4);
// {1,2,3}
Set<Integer> integerSet = Set.of(1, 2, 3);
// {"hello":"world","hi":"java"}
Map<String, String> hello = Map.of("hello", "world", "hi", "java");
-
Stream扩展:ofNullable、iterate、takeWhile、dropWhile、Optional扩展
-
try-with-resources 优化
-
接口私有方法
-
引入HttpClient
Java 1
-
局部变量类型推断 var
java 11
-
字符串强化:isBlank()、lines()、strip()、repeat(n)
-
集合转对应类型的数组
List<String> sampleList = Arrays.asList("felord.cn", "java 11"); // array = {"felord.cn", "java 11"}; String[] array = sampleList.toArray(String[]::new);
-
断言取反
Predicate.not()
-
文件中读写字符串内容更方便
String dir= "C://yourDir"; // 写入文件 Path path = Files.writeString(Files.createTempFile(dir, "hello", ".txt"), "hello java 11"); // 读取文件 String fileContent = Files.readString(path);
-
HttpClient支持HTTP2
java12
-
字符串缩进
String indent(int n):
当n>0时,会在字符串的每一行开头插入n个空格,字符串整体右移。当n<0时,会在字符串的每一行开头删除n个空格,如果实际的空格数小于n,删除该行所有空格,但是并不会换行。 -
字符串转换
<R> R transform(Function<? super String, ? extends R> f)
String txt = "hello "; // hello hello String s = txt.transform(str -> str.repeat(2));
-
基于内容的文件匹配
Files.mismatch(Path,Path)
// 文件对比 Path p1 = Files.createTempFile("file1", "txt"); Path p2 = Files.createTempFile("file2", "txt"); Files.writeString(p1, "felord.cn"); Files.writeString(p2, "felord.cn"); // -1L 二者内容相同 long mismatch = Files.mismatch(p1, p2);
-
Collectors::teeing
-
数字化格式类CompactNumberFormat
java 13
-
使用AppCDS的时候,就不在需要这么复杂了
-
ZGC 可以将未使用的堆内存返回给操作系统
-
Switch 表达式 (Preview)
int i; switch (x) { case "1": i=1; break; case "2": i=2; break; default: i = x.length(); break; }
int i = switch (x) { case "1" -> 1; case "2" -> 2; default -> { int len = args[1].length(); yield len; } };
-
文本块
String query = """ SELECT `EMP_ID`, `LAST_NAME` FROM `EMPLOYEE_TB` WHERE `CITY` = 'INDIANAPOLIS' ORDER BY `EMP_ID`, `LAST_NAME`; """;
java 14
-
instanceof模式匹配
//在Java14之前,我们通常的写法如下: Object obj = "程序新视界"; if(obj instanceof String){ String str = (String) obj; System.out.println("关注公众号:" + str); } //通过java14的新特性,我们可以简化成如下方式: Object obj = "程序新视界"; if(obj instanceof String str){ System.out.println("关注公众号:" + str); }
-
Switch表达式 转正
-
记录类型(Record Type)的引入
//定义一个Record类型如下: public record Point(int x, int y) { } //使用Record操作如下: Point point = new Point(1,3); System.out.println(point.x()); System.out.println(point.y());
java16
-
矢量计算
-
Record类型在JDK14作为preview,在JDK15处于第二轮preview,在JDK16转正
-
instanceof的模式匹配在JDK14作为preview,在JDK15作为第二轮的preview,在JDK16转正
-
jpackage在JDK14引入,JDK15作为incubating工具,在JDK16转正,从jdk.incubator.jpackage转为jdk.jpackage。它支持Linux: deb and rpm、macOS: pkg and dmg、Windows: msi and exe
java17
-
密封类(接口)(Sealed、permits 修饰符)
总结:java9到java17,常用新特性
-
创建集合新的方法--9
-
try-with-resources--9
-
引入HttpClient--9
-
字符串强化--11
-
集合转对应类型的数组--11
-
Switch 表达式--13-14
-
模式匹配--14-14
-
文本块--13-14
-
记录类型(Record Type)--14-16