JDK 8:Lambda 表达式
List<String> list = Arrays.asList("Apple", "Banana", "Orange"); list.forEach(fruit -> System.out.println(fruit));
Stream API
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); int sum = numbers.stream().filter(n -> n % 2 == 0).mapToInt(Integer::intValue).sum(); System.out.println("Sum of even numbers: " + sum);
JDK 9:模块系统(Project Jigsaw)详细信息请参见这里
jshell> int sum = 10 + 5;
sum ==> 15
jshell> System.out.println(sum);
15
JDK 10:局部变量类型推断(var 关键字)
var message = "Hello, JDK 10!";
System.out.println(message);
JDK 11:HTTP Client
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://www.example.com"))
.build();
client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body)
.thenAccept(System.out::println)
.join();
JDK 12:Shenandoah 垃圾回收器
java -XX:+UnlockExperimentalVMOptions -XX:+UseShenandoahGC -jar your-application.jar
JDK 13:Switch 表达式的增强
String day = "Monday";
int dayNumber = switch (day) {
case "Monday", "Tuesday" -> 1;
case "Wednesday" -> 3;
default -> throw new IllegalStateException("Invalid day: " + day);
};
System.out.println("Day number: " + dayNumber);
JDK 14:Records
record Person(String name, int age) { }
Person person = new Person("John Doe", 25);
System.out.println("Person: " + person);
JDK 15:
Unix域套接字通道
隐藏类的作用:
隐藏类天生为框架设计的,在运行时生成内部的class
隐藏类只能通过反射访问,不能直接被其他类的字节码访问
隐藏类可以独立于其他类加载、卸载,这可以减少框架的内存占用
详细信息请参见这里
JDK 16:
Unix域套接字通道改进
开发人员想要创建纯数据载体类(plain data carriers)通常都必须编写大量低价值、重复的、容易出错的代码。如:构造函数、getter/setter、equals()、hashCode()以及toString()等。
Records的目标是扩展Java语言语法,Records为声明类提供了一种紧凑的语法,通过对类做这样的声明,编译器可以通过自动创建所有方法并让所有字段参与hashCode()等方法实现。
详细信息请参见这里
JDK 17:
Sealed Classes(预览)
sealed interface Shape permits Circle, Square {
// ...
}
final class Circle implements Shape {
// ...
}
final class Square implements Shape {
// ...
}
JDK18:默认UTF-8字符集
macOS本地字符集为UTF-8。
Windows英文状态下本地字符集为en-US;中文状态下为GBK;日文状态下为ja-JP。
JDK19:
JPE-405:Record模式(预览功能)
JPE-422:JDK移植到Linux/RISC-V
JPE-424:外部函数和内存API(预览功能)
JPE-425:虚拟线程,也就是协程(预览功能)
JPE-426:向量API(第四次孵化)
JPE-427:switch匹配模式(第三次预览)
JPE-428:结构化并发(孵化功能)