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 { /*...*/ }