JDK8-JDK21的语法改变

从 JDK 8 到 JDK 17,Java 在语法上进行了许多改进和增强。以下是各个版本的主要语法升级:

JDK 8 (2014)

  1. Lambda 表达式:

    • 简化匿名内部类的写法,用于函数式编程。
    (parameters) -> expression
    
  2. 函数式接口:

    • 只有一个抽象方法的接口,可以使用 @FunctionalInterface 注解标注。
    @FunctionalInterface
    interface MyFunction {
        void apply();
    }
    
  3. 默认方法:

    • 接口中可以有带实现的方法。
    interface MyInterface {
        default void myMethod() {
            // implementation
        }
    }
    
  4. 静态方法:

    • 接口中可以定义静态方法。
    interface MyInterface {
        static void myStaticMethod() {
            // implementation
        }
    }
    
  5. 方法引用:

    • 使用 :: 关键字引用方法或构造函数。
    MyClass::myMethod
    
  6. 重复注解:

    • 同一注解在同一声明上可以多次使用。
    @Repeatable(Annotations.class)
    @interface MyAnnotation {}
    
  7. Optional 类:

    • 用于避免 null 值导致的 NullPointerException
    Optional<String> optional = Optional.of("value");
    

JDK 9 (2017)

  1. 模块系统 (Project Jigsaw):

    • 引入模块化系统,定义模块间的依赖关系。
    module my.module {
        requires another.module;
    }
    
  2. 接口私有方法:

    • 接口中可以有私有方法。
    interface MyInterface {
        private void myPrivateMethod() {
            // implementation
        }
    }
    

JDK 10 (2018)

  1. 局部变量类型推断:

    • 使用 var 关键字进行局部变量类型推断。
    var list = new ArrayList<String>();
    

JDK 11 (2018)

  1. 局部变量类型推断增强:

    • 允许在 lambda 表达式中使用 var
    (var x, var y) -> x + y
    
  2. 字符串增强:

    • 增加了一些字符串处理的方法,如 isBlank()lines()repeat() 等。
    "Hello\nWorld".lines().forEach(System.out::println);
    

JDK 12 (2019)

  1. Switch 表达式(预览特性):

    • Switch 语句可以返回值,并且可以使用 lambda 表达式风格。
    var result = switch (day) {
        case MONDAY -> "Start of the week";
        case FRIDAY -> "End of the week";
        default -> "Midweek";
    };
    

JDK 13 (2019)

  1. Switch 表达式增强(第二次预览):

    • 继续改进 Switch 表达式。
  2. 文本块(预览特性):

    • 多行字符串文字,使用三个双引号。
    String json = """
                  {
                      "name": "John",
                      "age": 30
                  }
                  """;
    

JDK 14 (2020)

  1. Switch 表达式:

    • Switch 表达式正式成为标准特性。
  2. 文本块(第二次预览):

    • 进一步改进文本块。
  3. instanceof 模式匹配(预览特性):

    • 简化类型检查和转换。
    if (obj instanceof String s) {
        System.out.println(s.length());
    }
    

JDK 15 (2020)

  1. 文本块:

    • 文本块正式成为标准特性。
  2. 隐藏类(隐式类):

    • 允许动态生成和加载类。
  3. Sealed 类(预览特性):

    • 限制哪些类可以扩展或实现。
    public sealed class Shape permits Circle, Rectangle {}
    

JDK 16 (2021)

  1. 记录类(Record):

    • 简化数据载体类的声明。
    public record Point(int x, int y) {}
    
  2. instanceof 模式匹配:

    • 模式匹配正式成为标准特性。
  3. Sealed 类(第二次预览):

    • 继续改进 Sealed 类。

JDK 17 (2021)

  1. Sealed 类:

    • Sealed 类和接口正式成为标准特性。
    public sealed class Shape permits Circle, Rectangle {}
    

JDK 18 (2022)

  • UTF-8默认字符集:将默认字符集更改为UTF-8。
  • 简单的Web服务器:引入一个简单的Web服务器用于开发和测试。

JDK 19 (2022)

  • 记录模式(预览特性):引入了记录模式,用于解构记录类。
  • Switch模式匹配(第二次预览):继续增强Switch模式匹配功能。

JDK 20 (2023)

  • 范围模式(预览特性):引入范围模式,用于更灵活的模式匹配。
  • 结构化并发(预览特性):引入用于简化并发编程的结构化并发API。

JDK 21 (2023)

  • 字符串模板:引入字符串模板,用于更简洁地嵌入和处理字符串。

    String name = "John";
    int age = 30;
    String message = STR."Hello, \{name}! You are \{age} years old.";
    System.out.println(message);  // 输出: Hello, John! You are 30 years old.
    
  • 记录模式:记录模式正式成为语言的一部分。

  • 通用实例of模式匹配:增强了类型检查和转换的灵活性。

小结

从 JDK 8 到 JDK 21,Java 引入了许多新的语法特性,以提高代码的简洁性、可读性和安全性。主要包括 lambda 表达式、方法引用、模块系统、局部变量类型推断、文本块、switch 表达式、记录类、模式匹配和封闭类等。这些改进使得 Java 语言更加现代化,更加适应当前软件开发的需求。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容