Skip to content
进阶

一句话答案

注解是元数据标记,通过 @Retention 控制保留策略,运行时注解靠反射读取,编译时注解靠 APT 处理。

核心要点

Java 17 是 LTS 版本,Java 21 是下一个 LTS,两个版本之间引入了大量实用特性:

1. Record 类(JDK 16 正式)

  • 不可变数据载体,用一行代码定义数据类
  • 自动生成 equals()hashCode()toString()、全参构造器、访问器方法
  • 替代 Lombok @Data 的典型场景:DTO、值对象、方法多值返回
java
record Point(int x, int y) {}
// 等价于一个 final class,包含 private final 字段、构造器、x()、y()、equals、hashCode、toString

2. Sealed Classes — 密封类(JDK 17 正式)

  • 限制哪些类可以继承/实现当前类,让继承体系变得可控
  • 配合 pattern matching 的 switch 可做穷举检查,编译器能在缺少分支时报错
java
sealed interface Shape permits Circle, Rectangle {}
final class Circle implements Shape { double radius; }
final class Rectangle implements Shape { double w, h; }

3. Text Blocks — 文本块(JDK 15 正式)

  • 用三引号 """ 编写多行字符串,保留格式,无需手动拼接和转义
  • 写 SQL、JSON、HTML 模板更清晰
java
String json = """
        {
            "name": "test",
            "value": 42
        }
        """;

4. Pattern Matching for instanceof(JDK 16 正式)

  • 类型匹配后自动绑定变量,消除冗余的强制类型转换
java
// 旧写法
if (obj instanceof String) {
    String s = (String) obj;
    System.out.println(s.length());
}
// 新写法
if (obj instanceof String s) {
    System.out.println(s.length());
}

5. Pattern Matching for switch(JDK 21 正式)

  • switch 支持类型模式匹配 + 守卫条件(when),替代大量 if-else 链
  • 配合 Sealed Classes 做穷举检查,无需 default 分支
java
String describe(Shape shape) {
    return switch (shape) {
        case Circle c when c.radius() > 100 -> "大圆";
        case Circle c    -> "圆: r=" + c.radius();
        case Rectangle r -> "矩形: " + r.w() + "x" + r.h();
        // sealed class 已穷举,不需要 default
    };
}

6. Virtual Threads — 虚拟线程(JDK 21 正式)

  • 由 JVM 调度的轻量级线程,创建成本极低(约 1KB 栈内存),可同时运行百万级线程
  • 解决传统线程池在高并发 IO 密集场景下线程数受限的瓶颈
  • 详见并发编程专题
追问与易错

追问方向:

  • @Retention 三种策略的区别?(SOURCE 编译丢弃/CLASS 字节码保留/RUNTIME 运行时反射可读)
  • Spring 的注解是怎么生效的?(BeanPostProcessor 通过反射扫描注解处理)
  • 自定义注解怎么做?(@interface + 元注解 + 处理逻辑)

易错点:

  • ❌ "注解本身有逻辑"——注解只是标记,逻辑在处理器(反射/APT)中
  • ❌ 混淆编译时注解和运行时注解的处理方式

💡 记忆锚点

Record一行代替整个POJO,Sealed类把继承关系焊死(permits白名单),switch模式匹配让instanceof和强转合二为一,虚拟线程1KB一个可开百万级——Java17到21是"少写废代码"的版本跃迁。