Java 15 新特性及具体应用
目录
1. 密封类(Sealed Classes)(预览特性)
2. 隐藏类(Hidden Classes)
3. 文本块(Text Blocks)(正式特性)
4. 模式匹配 instanceof(第二次预览)
5. ZGC 垃圾回收器(正式功能)
6. EdDSA 数字签名算法
7. Records 类(第二次预览)
总结
Java 15 于 2020 年 9 月发布,包含多项重要更新。以下是核心特性及代码示例:
1. 密封类(Sealed Classes)(预览特性)
作用:限制类的继承关系,增强封装性。
代码示例:
public sealed class Shape permits Circle, Square { // 只允许Circle和Square继承public abstract double area();
}public final class Circle extends Shape { // final子类private final double radius;public Circle(double r) { radius = r; }@Override public double area() { return Math.PI * radius * radius; }
}public non-sealed class Square extends Shape { // 非密封子类private final double side;public Square(double s) { side = s; }@Override public double area() { return side * side; }
}
应用场景:设计严格的类层次结构(如几何图形库)。
2. 隐藏类(Hidden Classes)
作用:动态生成不可发现的类,提升框架性能。
代码示例:
import java.lang.invoke.MethodHandles;public class HiddenClassDemo {public static void main(String[] args) throws Throwable {byte[] classBytes = /* 动态生成的字节码 */;MethodHandles.Lookup lookup = MethodHandles.lookup();Class<?> hiddenClass = lookup.defineHiddenClass(classBytes, true).lookupClass();Object instance = hiddenClass.getConstructor().newInstance();hiddenClass.getMethod("run").invoke(instance); // 调用隐藏类方法}
}
应用场景:动态代理(如 ORM 框架的延迟加载)。
3. 文本块(Text Blocks)(正式特性)
作用:简化多行字符串处理。
代码示例:
String json = """{"name": "Java 15","features": ["Text Blocks", "Sealed Classes"],"releaseYear": 2020}"""; // 自动保留格式
System.out.println(json);
应用场景:JSON/XML/SQL 等结构化文本的编写。
4. 模式匹配 instanceof(第二次预览)
作用:简化类型检查和转换。
代码示例:
public void process(Object obj) {if (obj instanceof String s) { // 直接绑定变量sSystem.out.println("String length: " + s.length());} else if (obj instanceof Integer i && i > 0) { // 支持条件判断System.out.println("Positive integer: " + i);}
}
应用场景:减少冗余的类型转换代码。
5. ZGC 垃圾回收器(正式功能)
作用:亚毫秒级停顿时间的低延迟 GC。
启用方式:
java -XX:+UseZGC MyApplication
应用场景:实时交易系统、高并发服务。
6. EdDSA 数字签名算法
作用:提供更安全的椭圆曲线签名。
代码示例:
import java.security.*;
KeyPairGenerator kpg = KeyPairGenerator.getInstance("Ed25519");
KeyPair kp = kpg.generateKeyPair();Signature sig = Signature.getInstance("Ed25519");
sig.initSign(kp.getPrivate());
sig.update("data".getBytes());
byte[] signature = sig.sign(); // 生成签名
应用场景:加密通信、区块链。
7. Records 类(第二次预览)
作用:简化不可变数据载体。
代码示例:
public record User(String name, int id) {} // 自动生成构造器/equals/hashCodeUser user = new User("Alice", 1001);
System.out.println(user.name()); // 访问字段
应用场景:DTO(数据传输对象)、配置类。
总结
特性 | 状态 | 核心价值 |
---|---|---|
密封类 | 预览 | 增强类型安全 |
文本块 | 正式 | 提升代码可读性 |
模式匹配 instanceof | 预览 | 简化条件逻辑 |
Records | 预览 | 减少样板代码 |
ZGC | 正式 | 降低GC停顿时间 |
注意:预览特性需通过编译参数启用:
javac --enable-preview -source 15 Main.java