Java 8 - Java 21 新特性介绍


Java 8(2014)

主要新特性

  1. Lambda 表达式 - 简化匿名内部类的写法。
  2. 函数式接口 (@FunctionalInterface) - 约束接口仅有一个抽象方法。
  3. Stream API - 提供集合数据处理的函数式编程方式。
  4. Optional 类 - 解决 null 引发的 NullPointerException
  5. 新的日期时间 API (java.time 包) - 解决 Date API 的弊端。

使用场景

  • Lambda 表达式:替代匿名内部类,减少样板代码。
  • Stream API:用于批量数据处理,如过滤、排序、映射。
  • Optional:减少 null 检查,提高代码健壮性。

示例

// 1. Lambda 表达式
Runnable r = () -> System.out.println("Hello Lambda!");
r.run();

// 2. Stream API
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.stream().filter(name -> name.startsWith("A")).forEach(System.out::println);

// 3. Optional
Optional<String> optional = Optional.ofNullable(null);
System.out.println(optional.orElse("Default Value"));

// 4. 日期 API
LocalDate today = LocalDate.now();
System.out.println(today);

Java 9(2017)

主要新特性

  1. 模块化系统(Project Jigsaw) - 提高项目的可维护性和安全性。
  2. List.of(), Set.of(), Map.of() - 创建不可变集合。
  3. 改进的 try-with-resources - 资源自动关闭。

使用场景

  • 模块化:用于拆分大型项目,提高封装性和安全性。
  • 不可变集合:简化创建只读集合的代码。

示例

// 1. 创建不可变集合
List<String> list = List.of("A", "B", "C");
System.out.println(list);

// 2. try-with-resources 简化
BufferedReader br = new BufferedReader(new FileReader("test.txt"));
try (br) {
    System.out.println(br.readLine());
}

Java 10(2018)

主要新特性

  1. 局部变量类型推断 (var) - 让编译器推断变量类型。
  2. G1 GC 改进 - 提高垃圾回收效率。

使用场景

  • var:简化变量声明,适用于短生命周期的局部变量。

示例

var numbers = List.of(1, 2, 3);
System.out.println(numbers);

Java 11(2018,LTS)

主要新特性

  1. var 在 Lambda 表达式中使用
  2. 标准 HttpClient
  3. 字符串增强 (isBlank(), lines(), repeat())
  4. ZGC(低停顿垃圾回收器)

使用场景

  • HttpClient:替代 HttpURLConnection,用于 HTTP 请求。
  • 字符串增强:更方便地处理字符串。

示例

// 1. HttpClient
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());

// 2. String 新方法
System.out.println(" ".isBlank());  // true
System.out.println("Hello\nWorld".lines().count());  // 2
System.out.println("Java".repeat(3));  // JavaJavaJava

Java 12 - Java 14(2019 - 2020)

主要新特性

  • switch 表达式(简化 switch 语法)
  • 多行文本块
  • record(简化数据类定义)

示例

// 1. switch 表达式
String result = switch (2) {
    case 1 -> "One";
    case 2 -> "Two";
    default -> "Other";
};

// 2. 文本块
String text = """
        Line 1
        Line 2
        """;
System.out.println(text);

// 3. record
record User(String name, int age) {}
User user = new User("Alice", 30);
System.out.println(user);

Java 15 - Java 17(2020 - 2021,LTS)

主要新特性

  • sealed(限制继承)
  • ZGC 作为默认垃圾回收器
  • instanceof 模式匹配

示例

// 1. sealed 类
sealed class Animal permits Dog, Cat {}
final class Dog extends Animal {}
final class Cat extends Animal {}

// 2. instanceof 模式匹配
Object obj = "Hello";
if (obj instanceof String s) {
    System.out.println(s.length());
}

Java 18 - Java 19(2022)

主要新特性

  • 简单 Web 服务器 (SimpleWebServer)
  • 虚拟线程(预览)
  • 结构化并发

示例

// 1. 启动简单 Web 服务器
SimpleFileServer.createFileServer(Path.of("static"), SimpleFileServer.OutputLevel.VERBOSE).start();

// 2. 虚拟线程(预览)
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
    executor.submit(() -> System.out.println(Thread.currentThread()));
}

Java 20 - Java 21(2023,LTS)

主要新特性

  • 虚拟线程(正式版)
  • record 模式匹配
  • 垃圾回收优化

示例

// 1. 虚拟线程
Thread.ofVirtual().start(() -> System.out.println("Hello Virtual Thread"));

// 2. record 模式匹配
record Point(int x, int y) {}
void printPoint(Object obj) {
    if (obj instanceof Point(int x, int y)) {
        System.out.println("Point: " + x + ", " + y);
    }
}

总结

版本主要特性使用场景
Java 8Lambda, Stream, Optional, 新日期 API简化代码,提高可读性
Java 9模块化, List.of()大型项目模块化,创建不可变集合
Java 10var 类型推断减少代码冗余
Java 11HttpClient, String 新方法HTTP 请求优化,字符串增强
Java 12switch 表达式代码可读性提升
Java 13文本块处理多行字符串
Java 14record代替数据类
Java 15sealed限制继承
Java 16instanceof 模式匹配更简洁的类型检查
Java 17LTS, sealed稳定生产版本
Java 18SimpleWebServer内嵌 Web 服务器
Java 19虚拟线程(预览)并发优化
Java 20结构化并发线程管理优化
Java 21LTS, 虚拟线程(正式版)高并发应用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值