1. 局部变量类型推断(var) Java 11 允许使用 var
关键字来推断局部变量的类型。
在 Java 11 中, var
关键字允许开发者在声明局部变量时省略类型,编译器会根据赋值自动推断类型。这使得代码更加简洁,尤其在类型复杂的情况下。
示例:
java
public class VarDemo {
public static void main(String[] args) {
var message = "Hello, Java 11!";
System.out.println(message);
}
}
详细解释: 在这个示例中, message
被推断为 String
, number
被推断为 int
,而 list
被推断为 ArrayList<String>
。使用 var
可以减少冗余的类型声明,特别是在复杂的泛型类型中。
2. 字符串方法增强 Java 11 增加了一些新的字符串方法,如 isBlank()
, lines()
, strip()
, repeat(int)
等。
Java 11 增加了一些新的字符串方法,包括 isBlank()
, lines()
, strip()
, 和 repeat(int)
,这些方法使得字符串处理更加方便
示例:
java
public class StringMethodsDemo {
public static void main(String[] args) {
String str = " Hello, Java 11! ";
// 使用 strip() 方法去除前后空格
System.out.println("Strip: '" + str.strip() + "'"); // 输出: 'Hello, Java 11!'
// 使用 isBlank() 方法检查字符串是否为空或只包含空白字符
System.out.println("Is Blank: " + str.isBlank()); // 输出: false
// 使用 lines() 方法将字符串按行分割
str = "Hello\nJava\n11";
str.lines().forEach(System.out::println); // 输出每一行
// 使用 repeat() 方法重复字符串
System.out.println("Repeat: " + "Java".repeat(3)); // 输出: JavaJavaJava
}
}
详细解释:
strip()
方法去除字符串两端的空白字符。isBlank()
方法检查字符串是否为空或只包含空白字符。lines()
方法将字符串按行分割并返回一个流,便于处理多行字符串。repeat(int)
方法可以重复字符串指定的次数。
3. 文件 API 的新方法 Java 11 在 Files
类中增加了一些新方法,如 readString()
和 writeString()
。
Java 11 在 Files
类中增加了 readString()
和 writeString()
方法,使得文件读写操作更加简洁。
示例:
java
import java.nio.file.Files;
import java.nio.file.Path;
public class FileApiDemo {
public static void main(String[] args) throws Exception {
Path path = Path.of("example.txt");
// 写入字符串到文件
Files.writeString(path, "Hello, Java 11 File API!");
// 从文件读取字符串
String content = Files.readString(path);
System.out.println("File Content: " + content);
// 清理文件
Files.delete(path);
}
}
详细解释:
writeString(Path, String)
方法可以方便地将字符串写入文件。readString(Path)
方法可以直接读取文件内容并返回字符串。- 使用
Path.of()
方法可以更方便地创建Path
对象。
4. HttpClient API Java 11 引入了新的 HttpClient
API,支持 HTTP/2。
Java 11 引入了新的 HttpClient
API,支持 HTTP/2 协议,并提供了更为现代化的 HTTP 请求处理方式。
示例:
java
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class HttpClientDemo {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(new java.net.URI("https://api.github.com"))
.header("Accept", "application/vnd.github.v3+json")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println("Response Code: " + response.statusCode());
System.out.println("Response Body: " + response.body());
}
}
详细解释:
HttpClient
是一个用于发送 HTTP 请求的客户端。HttpRequest
用于构建 HTTP 请求,包括设置请求方法、URI 和请求头。HttpResponse
用于接收响应,包括状态码和响应体。
5. 新垃圾收集器(ZGC) Java 11 引入了 Z Garbage Collector(ZGC),旨在提供低延迟的垃圾回收。
Java 11 引入了 Z Garbage Collector(ZGC),旨在提供低延迟的垃圾回收。
示例: ZGC 是一种 JVM 选项,无法通过代码示例直接展示。要启用 ZGC,可以在启动应用程序时使用以下参数:
shell
# ZGC 是一种 JVM 选项,无法通过代码示例直接展示
# 启动应用程序时可以使用以下参数启用 ZGC:
java -XX:+UseZGC -jar yourapp.jar
详细解释: ZGC 是一种可扩展的低延迟垃圾收集器,能够在大内存环境下有效运行,适合需要高响应性的应用程序。它通过并行处理和分代回收来减少停顿时间。
6. 运行时常量池的改进 Java 11 对运行时常量池进行了改进,特别是对字符串的处理。
Java 11 对运行时常量池进行了改进,特别是对字符串的处理,使得字符串的存储和访问更加高效。
示例:
java
public class StringPoolDemo {
public static void main(String[] args) {
String str1 = "Hello";
String str2 = "Hello";
// 使用 intern() 方法
String str3 = new String("Hello").intern();
System.out.println(str1 == str2); // true
System.out.println(str1 == str3); // true
System.out.println(str1.equals(str3)); // true
}
}
详细解释:
- 在这个示例中,
str1
和str2
都指向字符串常量池中的同一个对象。 intern()
方法将字符串加入常量池,如果常量池中已经存在相同的字符串,则返回那个字符串的引用。这可以节省内存。
7. 移除的特性
Java 11 移除了许多不再使用的特性,如 Java EE 和 CORBA 模块。
详细解释:
- Java EE(企业版)和 CORBA(公共对象请求代理架构)模块的移除意味着开发者需要寻找替代方案,如使用 Spring 或其他现代框架来构建企业级应用。
- 这使得 JDK 更加轻量,同时推动了开发者向更现代的技术栈迁移。