JDK8:
-
Lambda表达式: Lambda表达式是一种匿名函数。它可以简化编写内部类的过程,使代码更加简洁和易读,并且可以方便地处理集合数据。
-
函数式接口:JDK 8引入了函数式接口的概念,即只包含一个抽象方法的接口。Java 8为函数式接口引入了一个新的注解@FunctionalInterface ,用来标记函数式接口。
-
Stream API:Stream API提供了一种新的处理集合数据的方式——函数式编程。它可以通过链式操作来处理数据,包括过滤、映射、排序等操作,使得代码更加简洁和易读。
-
默认方法和静态方法:默认方法是接口中的一种新特性,允许在接口中定义具有默认实现的方法。这样可以在不破坏现有代码的情况下向接口中添加新的方法。而静态方法则允许我们在接口中定义静态方法。
-
方法引用:方法引用是一种简化Lambda表达式的语法。它可以直接引用已经存在的方法或者构造器,不需要重新编写Lambda表达式,使得代码更加简洁和易读。
-
新的日期和时间API:JDK 8引入了新的日期和时间API,以替代旧的java.util.Date和java.util.Calendar类。它提供了更加灵活和易用和线程安全的日期和时间处理方式。
-
CompletableFuture类:用于支持异步编程和并发操作。
-
其他改进:JDK 8还包括其他一些改进,如重复注解、类型注解、新的编译器API等。
JDK11:
字符串API增强:
isBlank()
用来判断字符串是否为空字符 ""
或者 trim()
之后( " "
)为空字符
lines()
将一个字符串按照行终止符(换行符 \n
或者回车符 \r
)进行分割
strip()
去除字符串前后的“全角和半角”空白字符
repeat(n)
按照给定的次数重复串联字符串的内容
var可以用于修饰Lambda局部变量
在Java 11中 var
可以用于修饰Lambda局部变量
文件中读写字符串内容更新
可以通过 Files
工具类提供的新的静态方法 readString
和 writeString
分别进行读写文件的字符串内容
嵌套类的访问控制规则更新
两个新的属性: NestMembers
的属性,用于标识其它已知的静态 nest 成员;NestHost
属性,用于标识出它的 nest 宿主类
HttpClient支持HTTP2
支持HTTP2,底层进行了大幅度的优化,并且完全支持异步非阻塞。
其它
比如引入了ZGC,支持支持 TLS 1.3 协议,引入了动态调用(invokedynamic)机制。
JDK17:
内部 API 的强封装:许多 JDK 内部 API 在 JDK 17 中被标记为强封装,不再公开为公共 API。
模块的强封装:强化了一些 JDK 内部模块的封装,以防止外部模块直接访问这些内部模块。
Sealed JNI(密封 JNI):引入的一个特性,旨在限制本机接口(JNI)的实现,以提高本机代码的安全性。
改进的垃圾收集器
在 JDK 17 中进行了一些改进和优化,提供更好的垃圾收集器性能和稳定性。如ZGC 、Shenandoah GC、G1 GC都进行了一些改进。在JDK17中,还引入了一组新的垃圾收集器接口,允许开发人员实现自定义的垃圾收集器。
JDK21:
虚拟线程
可以在单个线程上管理多个任务,从而实现更高的资源利用率和更好的性能。
字符串模板
开发者可以更方便地构建和格式化字符串。模板中可以包含变量和表达式,使字符串操作更加灵活和直观。
结构化并发预览
允许开发者在多线程环境中更好地控制和管理任务。通过使用结构化并发,开发者可以更容易地编写可预测和可靠的并发代码。
密钥封装机制(KEM)API
提供了一种更加安全和灵活的方式来管理加密密钥。通过使用KEM API,开发者可以更容易地实现密钥的生成、存储和使用,从而提高应用程序的安全性。