2. Lambda 参数的局部变量语法(Java 11)
3. 文本块(Java 13,正式在 Java 15)
- String json = """
- {
- "name": "John",
- "age": 30
- }
- """;
4. switch 表达式(Java 14,正式在 Java 17)
- Integer day = 2;
- String result = switch (day) {
- case MONDAY, FRIDAY, SUNDAY -> "Weekend";
- case TUESDAY, THURSDAY, SATURDAY -> "Weekday";
- default -> throw new IllegalStateException("Invalid day: " + day);
- };
- System.out.println("现在是" + result);
5. 模式匹配 instanceof
(Java 16)
- if (obj instanceof String s) {
- // 可以直接使用 s
- System.out.println(s);
- }
6. 记录类型(Java 16,正式在 Java 17)
- 不可变性:记录实例的状态是不可变的,一旦创建,其字段值就不能更改。
- 数据载体:记录被设计为简单的数据载体,用于传输数据,不推荐在其中添加复杂的业务逻辑。
- //record类
- public record User(String name, int age) {
- }
使用Record声明的User类
- public static void main(String[] args) {
- User user = new User("张三", 18, "北京市朝阳区");
- System.out.println(user.address());
- System.out.println(user.name());
- System.out.println(user.age());
- }
7. 密封类(Java 17)
- public sealed class Shape permits Circle, Square, Rectangle {
- // ...
- }
指定子类:子类必须选择如何继承密封类,它们可以是 final
(不能被进一步继承)、sealed
(指定其自己的子类)或 non-sealed
(允许开放继承)。
- public final class Circle extends Shape { /*...*/ }
- public sealed class Rectangle extends Shape permits FilledRectangle, EmptyRectangle { /*...*/ }
- public non-sealed class Square extends Shape { /*...*/ }