java8新特性,java17新特性

java新特性

文章目录

  • java新特性
    • java8的新特性
    • java17新特性(重要)
    • end

java8的新特性

目前使用最多的jdk版本

相较jdk7主要不同在于

  1. Lambda 表达式和函数式编程
    • JDK 8 引入了 Lambda 表达式,使得函数式编程更加便捷。Lambda 表达式允许将函数作为参数传递给方法,以及在集合的操作中更简洁地进行数据处理。
    • 新增的 java.util.function 包提供了函数式接口(如 FunctionPredicateConsumer 等),用于支持函数式编程的操作。
  2. Stream API
    • JDK 8 引入了 Stream API,允许以声明式的方式对集合进行操作。Stream 提供了过滤、映射、归约等操作,可以显著简化集合处理的代码。
  3. Default 方法和接口的扩展
    • JDK 8 允许接口中定义默认方法(Default Method),这样在接口发生变化时,实现类不需要全部重新实现。
    • 接口还可以包含静态方法,用于提供实用工具方法。
  4. 新的日期和时间 API
    • JDK 8 引入了 java.time 包,提供了全新的日期和时间 API,替代了以前的 java.util.Datejava.util.Calendar
    • 新的 API 更加易用、清晰,可以更好地处理日期、时间、时间间隔等。
  5. 方法引用
    • JDK 8 允许通过方法引用来简化 Lambda 表达式,特别是当一个 Lambda 表达式只调用一个已有方法时。
  6. 重复注解
    • JDK 8 支持在同一元素上多次使用同一注解,通过重复注解(Repeatable Annotation)来简化代码和提高可读性。
  7. 类型注解
    • JDK 8 引入了类型注解,允许在变量、参数、返回值等地方使用注解,以提供更多的编译时检查。
  8. Nashorn 引擎
    • JDK 8 替换了旧的 JavaScript 引擎为全新的 Nashorn 引擎,提供更好的性能和更广泛的兼容性。
  9. 其他改进
    • JDK 8 还包括对并发编程的改进,如新的 java.util.concurrent 类和原子变量。
    • 改进了 JVM 的性能、内存管理和垃圾回收。

java17新特性(重要)

在2021/9/14正式发布

长期支持版本,最多支持到2029/9

  1. 增强的伪随机数生成器

  2. 弃用Applet API

    • Applet用于编写在 Web 浏览器端运行的 Java 小程序,很多年前就已经被淘汰了,已经没有理由使用了。 在 Java 9 时被标记弃用,但到17才删除。
  3. switch的类型匹配

    • 各类型包括null的判断也进行了优化
// New code
static String formatterPatternSwitch(Object o) {
    return switch (o) {
        case Integer i -> String.format("int %d", i);
        case Long l    -> String.format("long %d", l);
        case Double d  -> String.format("double %f", d);
        case String s  -> String.format("String %s", s);
        default        -> o.toString();
    };
}
  1. 删除远程方法调用激活机制

    • 删除RMI激活机制,
  2. 密封类转正

    • 密封类在java15就有了,这是一种用于限制继承关系的新特性。密封类允许你明确指定哪些类可以成为其子类,从而在一定程度上增强了代码的可维护性和安全性。

    • 在正常情况下,一个类可以被任何其他类继承。然而,有时你可能希望限制继承的范围,以确保只有特定的子类可以继承一个类。这就是密封类的作用。

    • 密封类的好处在于,它可以在编译时提供更强的类型检查,避免意外的继承和继承链的混乱。它可以帮助开发者更好地控制代码的继承结构,以及在未来对代码进行扩展和维护时更加可靠。

  3. 删除实验性的 AOT 和 JIT 编译器

    • 在java9引入,作用是在虚拟机启动前将java类编译成本机代码,删除是因为很少使用,维护的工作量太大
  4. 弃用安全管理器

    • 因为不是保护客户端java代码的主要方法,也很少保护服务端代码,所以弃用
  5. 外部函数和内存API(孵化)

    • 可以与运行时之外的代码和数据进行互操作,高效调用外部函数,安全访问外部内存(不受jvm管理的内存)
  6. 向量API(正式)

    • 提供高性能向量计算

end

你可能感兴趣的:(开发语言,java,特性,java8,java17,jdk,jdk8)