JDK11新特性
JDK 11 引入了许多新特性,以下是一些主要的更新及其代码示例:
1. HTTP Client API(JEP 321)
JDK 11 标准化了HTTP客户端API,提供了更高效、灵活的方式来处理HTTP请求和响应,支持HTTP/1.1和HTTP/2协议。
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class HttpClientExample {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://example.com"))
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.statusCode());
System.out.println(response.body());
}
}
2. String增强
JDK 11增强了字符串处理方法,比如isBlank
, lines
, strip
, repeat
, 和 stripIndent
等。
public class StringEnhancements {
public static void main(String[] args) {
String str = " Hello, World! \n\t";
System.out.println("Is blank? " + str.isBlank()); // 判断字符串是否为空白
System.out.println("Stripped: " + str.strip()); // 去除首尾空白字符
System.out.println("Repeated 3 times: " + str.repeat(3)); // 重复字符串
}
}
3. Epsilon垃圾收集器(JEP 318)
Epsilon是一个“无操作”垃圾收集器,主要用于测试和分析目的,能最小化GC的开销和延迟。
java -XX:+UseEpsilonGC YourApplication
4. 动态类文件常量(JEP 309)
允许在运行时生成或修改常量池中的常量,这对于某些动态配置场景非常有用。
5. ZGC加强版
虽然不是JDK 11特有的新特性,但JDK 11中ZGC得到了进一步的增强,提供了低延迟的垃圾收集能力。
java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC YourApplication
6. 废弃CMS垃圾收集器
JDK 11中,传统的并发标记清除(CMS)垃圾收集器被废弃,鼓励用户转向G1或ZGC等现代收集器。
7. 嵌套类访问控制改进
简化了嵌套类之间的访问控制,提高了代码的可读性和维护性。
public class OuterClass {
private class NestedClass {
public void accessOuterMember() {
// 可以直接访问外层类的成员
System.out.println("Accessing outer class member...");
}
}
public void testNestedClass() {
NestedClass nested = new NestedClass();
nested.accessOuterMember();
}
public static void main(String[] args) {
OuterClass outer = new OuterClass();
outer.testNestedClass();
}
}
8. TLS 1.3支持(JEP 332)
JDK 11添加了对TLS(Transport Layer Security)1.3协议的支持,提高了安全性并优化了性能。这一特性主要体现在网络通信的安全层面上,开发者无需直接编写特定代码来启用TLS 1.3,因为它是作为SSL/TLS实现的一部分自动支持的。但在使用HttpsURLConnection
或其他SSL/TLS客户端时,系统会自动尝试使用最安全的协议版本,包括TLS 1.3。
9. Flight Recorder(JEP 346)
引入了一个新的低开销数据收集框架,即Java Flight Recorder (JFR),它原本是Oracle的商业特性,但在JDK 11中成为开源并集成到JDK中。JFR可以用来收集诊断和分析数据,帮助监控JVM和应用程序的性能。
java -XX:StartFlightRecording your_application
10. 删除Java EE和CORBA模块(JEP 320, JEP 329)
JDK 11移除了对Java EE和CORBA技术的支持,这些技术现在由独立的项目和组织维护。这一改变反映了Java平台向更轻量级和模块化的方向发展。
11. Unicode 10.0支持
JDK 11更新了其内部使用的Unicode版本到Unicode 10.0,增加了对更多字符集的支持,提高了国际化和本地化能力。
public class UnicodeExample {
public static void main(String[] args) {
String unicodeChar = "\u{1F600}"; // Unicode 10.0中的笑脸字符
System.out.println("Unicode Character: " + unicodeChar);
}
}
12. Lambda 参数提示(JEP 323)
JDK 11增强了对lambda表达式参数的类型推断,使得IDE和编译器能够提供关于lambda参数类型的上下文提