JDK 新特性
编辑# JDK 新特性
1. 引入模块
Java 9 开始引入了模块(Module),目的是为了管理依赖。使用模块可以按需打包 JRE 和进一步限制类的访问权限。
2. 接口支持私有方法
JAVA 9 开始,接口里可以添加私有方法,JAVA 8 对接口增加了默认方法的支持,在 JAVA 9 中对该功能又来了一次升级,现在可以在接口里定义私有方法,然后在默认方法里调用接口的私有方法。这样一来,既可以重用私有方法里的代码,又可以不公开代码。
3. 匿名内部类支持钻石(diamond)运算符
JAVA 5 就引入了泛型(generic),到了 JAVA 7 开始支持钻石(diamond)运算符:<>,可以自动推断泛型的类型;但是这个自动推断类型的钻石运算符不支持匿名内部类,在 JAVA 9 中也对匿名内部类做了支持。
4. 增强的 try-with-resources
JAVA 7 中增加了try-with-resources的支持,可以自动关闭资源,但需要声明多个资源变量时,需要在 try 中写多个变量的创建过程,JAVA 9 中对这个功能进行了增强,可以引用 try 代码块之外的变量来自动关闭。
5. 弃用 new Integer()
JAVA 9 开始弃用了 new Integer() 的方式来创建 Integer 对象,推荐通过静态工厂 Integer.valueOf() 的方式来替代,其它包装类类似。
6. 局部变量的自动类型推断(var)
JAVA 10 带来了一个很有意思的语法 - var,它可以自动推断局部变量的类型,以后再也不用写类型了,也不用靠 lombok 的 var 注解增强了,不过这个只是语法糖,编译后变量还是有类型的,使用时还是考虑下可维护性的问题,不然写多了可就成 JavaScript 风格了。
7. Lambda 中的自动类型推断(var)
JAVA 11 中对 Lambda 语法也支持了 var 这个自动类型推断的变量,通过 var 变量还可以增加额外的注解。
8. java 命令增强
以前编译一个 java 文件时,需要先 javac 编译为 class,然后再用 java 执行,JAVA 11 之后可以直接使用 java 命令。
9. Java Flight Recorder 开源
「Java Flight Recorder」 是个非常好用的调试诊断工具,不过之前是在 Oracle JDK 中, JAVA 11 后就开源了,OpenJDK 现在也可以用这个功能。
10. 更简洁的 switch 语法
JAVA 12 和 13 分别增强了 switch 的语法。
11. instanceof 增强
之前处理动态类型碰上要强转时,需要先 instanceof 判断一下,然后再强转为该类型处理,JAVA 12 之后 instanceof 支持直接类型转换了,不需要再来一次额外的强转。
12. 文本块(Text Block)的支持
JAVA 13 中帮你解决了大段带换行符的字符串报文
的问题,增加了文本块(""")的支持,可以不通过换行符换行拼字符串,而且不需要转义特殊字符,就像用模板一样。
13. 新增 record 类型
JAVA 14 新增 record 类型,干掉复杂的 POJO 类,一般我们创建一个 POJO 类,需要定义属性列表,构造函数,getter/setter方法,比较麻烦,JAVA 14 为我们带来了一个便捷的创建类的方式 - record。
不过这个只是一个语法糖,编译后还是一个 Class,和普通的 Class 区别不大。
14. 更直观的 NullPointerException 提示
JAVA 14 优化了 NullPointerException 的提示,让你更容易定位到哪个对象为空。
15. 新增 jpackage 打包工具
JAVA 14 新增 jpackage 打包工具,可以直接打包二进制程序,再也不用装 JRE 了。
之前如果想构建一个可执行的程序,还需要借助三方工具,将 JRE 一起打包,或者让客户电脑也装一个 JRE 才可以运行我们的 JAVA 程序。
现在 JAVA 直接内置了 jpackage 打包工具,帮助你一键打包二进制程序包。
16. 新增封闭(Sealed )类
JAVA 的继承目前只能选择允许继承和不允许继承(final 修饰),JAVA 15 新增了一个封闭(Sealed )类的特性,可以指定某些类才可以继承。
17. 新增垃圾回收器
JAVA 15 中,两款垃圾回收器ZGC 和 Shenandoah 正式登陆(默认 G1 ),性能更强,延迟更低。
注:Spring Framework 6 和 Spring Boot 3 的应用程序运行时至少需要JDK 17。
- 2
- 0
-
分享