从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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂
· 凌晨三点救火实录:Java内存泄漏的七个神坑,你至少踩过三个!