Java 11 是 Java SE 的一个长期支持版本(LTS),在 2018 年发布,带来了一些实用的新特性,帮助开发者写出更简洁高效的代码。下面是几个重要更新的简要介绍:

1. 字符串方法增强

Java 11 为 String 类新增了几个实用方法:

  • isBlank():判断字符串是否为空白(空字符串或仅包含空白字符)。
  • lines():将字符串按换行符拆分为流(Stream)。
  • strip(), stripLeading(), stripTrailing():更智能地去除空白字符,替代 trim()
  • repeat(int count):重复字符串多次。

示例:

1
2
3
4
5
String s = "  Hello\nJava 11  ";
System.out.println(s.isBlank()); // false
s.lines().forEach(System.out::println); // 分行输出
System.out.println(s.strip()); // 去除首尾空白
System.out.println("Hi".repeat(3)); // HiHiHi

2. 局部变量类型推断增强(var)

Java 10 引入了 var 用于局部变量类型推断,Java 11 在这基础上允许在 lambda 表达式参数中使用 var,方便统一写法。

1
2
var list = List.of(1, 2, 3);
list.forEach((var x) -> System.out.println(x));

3. HTTP Client 标准化

Java 11 正式将 java.net.http.HttpClient 变成标准 API,支持异步和同步 HTTP 请求,替代了旧的 HttpURLConnection

示例:

1
2
3
4
5
6
7
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://example.com"))
.build();

HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
System.out.println(response.body());

4. 新的文件方法

Files 类新增了 writeStringreadString 方法,方便地读写文本文件:

1
2
3
4
Path path = Paths.get("test.txt");
Files.writeString(path, "Hello Java 11");
String content = Files.readString(path);
System.out.println(content);

5. 其他简化

  • Optional 新增 isEmpty() 方法,方便判断是否为空。
  • 支持运行单个 .java 文件,无需事先编译:
1
java HelloWorld.java