你提到 Java 11,我可以帮你整理一个 Java 11 的全面概览,涵盖新特性、安装、开发注意点和使用场景。下面是详细内容:


一、Java 11 简介

  • 发布时间:2018 年 9 月
  • 类型:长期支持版本(LTS,Long-Term Support)
  • 特点
    • 移除了一些旧 API(如 Java EECORBA 模块)
    • 引入新的标准 API 和工具
    • 更注重 性能、安全和现代化开发体验

二、Java 11 新特性(重点)

1. 字符串增强

  • String 新方法:
    • isBlank() → 判断是否为空白
    • lines() → 按行分割字符串为 Stream
    • strip() / stripLeading() / stripTrailing() → 去除空白(比 trim 更智能)
    • repeat(int) → 重复字符串

示例:

String text = "  Hello\nWorld  ";
text.lines().forEach(System.out::println);
System.out.println(" ".isBlank()); // true


2. 集合增强

  • List.of() / Set.of() / Map.of() → 轻松创建不可变集合
List<String> list = List.of("A", "B", "C");
Map<String, Integer> map = Map.of("x", 1, "y", 2);


3. Lambda 与 Optional 改进

  • Optional.isEmpty() → 检查是否为空
  • 支持更灵活的流式操作

4. 新 HTTP 客户端 API

  • 完全替代 HttpURLConnection
  • 支持异步请求和 HTTP/2
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());


5. 局部变量类型推断(var)改进

  • Java 10 引入的 var 在 Java 11 中可用于 lambda 参数(部分场景)
var list = List.of(1, 2, 3);
list.forEach((var item) -> System.out.println(item));


6. JEP 321:HTTP Client 标准化

  • 支持同步和异步请求
  • 支持 WebSocket

7. 运行时动态类文件打包

  • 可以直接用 java 命令运行单个 .java 文件
java HelloWorld.java

  • 无需先编译成 .class

三、Java 11 移除或弃用的特性

  • Java EE 模块(java.xml.bind, java.activation 等)
  • CORBA 模块
  • Pack200 工具

开发中如果用到这些,需要单独引入依赖(Maven 或 Gradle)。


四、安装与使用

  1. 下载 JDK 11(推荐 OpenJDK 或 Oracle JDK)
  2. 配置环境变量 JAVA_HOME
  3. 验证:
java -version
# java version "11.0.x"


五、适合使用场景

  • 企业级应用(LTS 支持)
  • Web 服务、微服务开发
  • 新项目可以直接使用新 API,提高开发效率
  • 弃用老旧模块,减少维护负担