JDK 11 是一个长期支持(LTS)版本,相比 JDK 8,引入了许多新特性和功能,涵盖语言特性、API 增强、性能优化和工具改进。以下是 JDK 11 相比 JDK 8 的主要新特性、使用代码示例以及使用它的好处。
JDK 11 相比 JDK 8 的主要新特性
1. var 关键字(JDK 10 引入)
- 功能:允许在局部变量声明时使用
var代替显式的类型声明,编译器会自动推断类型。 - 好处:减少样板代码,提高代码可读性。
示例代码:
public class VarExample {
public static void main(String[] args) {
var message = "Hello, JDK 11!";
System.out.println(message);
var numbers = List.of(1, 2, 3, 4);
for (var number : numbers) {
System.out.println(number);
}
}
}
2. 新的 HTTP 客户端 API
- 功能:提供了现代化的 HTTP 客户端,支持同步和异步请求,替代了旧的
HttpURLConnection。 - 好处:更易用,支持 HTTP/2 和 WebSocket。
3. 字符串增强
- 功能:新增了一些实用的字符串方法,如
isBlank()、lines()、strip()等。 - 好处:简化字符串操作,提高代码可读性。
示例代码:
public class StringEnhancements {
public static void main(String[] args) {
String str = " Hello, JDK 11! ";
System.out.println(str.isBlank()); // false
System.out.println(str.strip()); // "Hello, JDK 11!"
System.out.println(str.lines().count()); // 1
}
}
4. 集合工厂方法(JDK 9 引入)
- 功能:
List.of()、Set.of()和Map.of()方法用于创建不可变集合。 - 好处:减少样板代码,避免手动创建集合。
示例代码:
import java.util.List;
import java.util.Map;
import java.util.Set;
public class CollectionFactoryMethods {
public static void main(String[] args) {
List<String> list = List.of("A", "B", "C");
Set<String> set = Set.of("X", "Y", "Z");
Map<String, Integer> map = Map.of("Key1", 1, "Key2", 2);
System.out.println(list);
System.out.println(set);
System.out.println(map);
}
}
5. Files API 增强
- 功能:新增
readString()和writeString()方法,简化文件读写操作。 - 好处:更直观的文件操作,减少代码量。
示例代码:
import java.nio.file.Files;
import java.nio.file.Path;
public class FilesApiExample {
public static void main(String[] args) throws Exception {
Path path = Files.writeString(Files.createTempFile("test", ".txt"), "Hello, JDK 11!");
String content = Files.readString(path);
System.out.println(content);
}
}
6. Lambda 表达式中的 var(JDK 11 引入)
- 功能:允许在 Lambda 表达式的参数中使用
var。 - 好处:支持添加注解,同时保持类型推断的灵活性。
示例代码:
import java.util.List;
public class LambdaVarExample {
public static void main(String[] args) {
List<String> names = List.of("Alice", "Bob", "Charlie");
names.forEach((var name) -> System.out.println(name.toUpperCase()));
}
}
7. ZGC(Z Garbage Collector)
- 功能:引入了低延迟垃圾回收器 ZGC。
- 好处:适合对延迟敏感的应用程序,最大暂停时间通常低于 10 毫秒。
启用 ZGC:
java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -Xmx2G MyApp
8. 移除和弃用
- 移除了 Java EE 和 CORBA 模块。
- 弃用了
NashornJavaScript 引擎。
JDK 11 的好处
-
提高开发效率:
- 新的语言特性(如
var和字符串增强)减少了样板代码,提高了代码可读性和开发效率。
- 新的语言特性(如
-
现代化工具支持:
- 新的 HTTP 客户端 API 和增强的
FilesAPI 提供了更直观的编程接口。
- 新的 HTTP 客户端 API 和增强的
-
性能优化:
- 引入了 ZGC 和其他 JVM 改进,提升了运行时性能,特别是在延迟敏感的应用中。
-
安全性增强:
- 修复了 JDK 8 中的已知漏洞,并引入了更强的安全机制。
-
长期支持(LTS) :
- JDK 11 是一个长期支持版本,适合在生产环境中使用。
总结
JDK 11 相比 JDK 8 引入了许多现代化的特性和工具,以下是主要对比:
| 特性/版本 | JDK 8 | JDK 11 |
|---|---|---|
var | 不支持 | 支持 |
| HTTP 客户端 API | 旧的 HttpURLConnection | 新的 HTTP 客户端 API |
| 字符串增强 | 不支持 | 支持(如 isBlank()、strip()) |
| 集合工厂方法 | 不支持 | 支持(如 List.of()) |
| 文件读写增强 | 不支持 | 支持(如 readString()) |
Lambda 中的 var | 不支持 | 支持 |
| ZGC | 不支持 | 支持 |