当前位置: 首页 > web >正文

从JDK 8到JDK 17的主要变化

从JDK 8到JDK 17的主要变化

Java从JDK 8到JDK 17经历了重大演进,下面概述主要变化和新特性:

JDK 9 (2017年9月)

  1. 模块系统(Project Jigsaw)

    • 引入模块化系统,通过module-info.java定义模块
    • 增强了安全性和可维护性
  2. JShell

    • 交互式REPL工具
  3. 集合工厂方法

    List<String> list = List.of("a", "b", "c");
    Set<String> set = Set.of("a", "b", "c");
    Map<String, Integer> map = Map.of("a", 1, "b", 2);
    

JDK 10 (2018年3月)

  1. 局部变量类型推断(var)
    var list = new ArrayList<String>();
    

JDK 11 (LTS, 2018年9月)

  1. HTTP Client API标准化

    • 支持HTTP/2和WebSocket
  2. 移除Java EE和CORBA模块

    • 移除了javax.xml.ws等模块
  3. 单文件源代码运行

    java HelloWorld.java
    

JDK 12-16 (非LTS版本)

  1. Switch表达式(JDK 12预览, JDK 14标准化)

    int numLetters = switch (day) {case MONDAY, FRIDAY, SUNDAY -> 6;case TUESDAY                -> 7;default      -> {String s = day.toString();yield s.length();}
    };
    
  2. 文本块(JDK 13预览, JDK 15标准化)

    String html = """<html><body><p>Hello, world</p></body></html>""";
    
  3. Records(JDK 14预览, JDK 16标准化)

    record Point(int x, int y) {}
    
  4. 模式匹配instanceof(JDK 14预览, JDK 16标准化)

    if (obj instanceof String s) {System.out.println(s.length());
    }
    

JDK 17 (LTS, 2021年9月)

  1. 密封类(Sealed Classes)

    public sealed class Shape permits Circle, Square, Rectangle {}
    
  2. 移除实验性AOT和JIT编译器

  3. 恢复始终严格浮点语义

其他重要变化

  • 垃圾收集器改进:G1成为默认GC,引入ZGC和Shenandoah
  • 性能提升:包括字符串压缩、改进的哈希算法等
  • 弃用和移除:移除了Applet API、移除了Security Manager等
  • 新的API:如新的日期时间API(在JDK 8中引入)、Process API更新等

迁移建议

  1. 从JDK 8迁移到JDK 17是一个重大升级,建议:

    • 先升级到JDK 11(LTS),再升级到JDK 17
    • 测试模块化兼容性(如果使用模块系统)
    • 检查已弃用或移除的API
  2. 新项目建议直接使用JDK 17,它是最新的长期支持版本。

http://www.xdnf.cn/news/8411.html

相关文章:

  • 《Medical SAM适配器:将分割一切模型适配于医学图像分割》|文献速递-深度学习医疗AI最新文献
  • Git企业级——进阶
  • NHANES指标推荐:MHR
  • leetcode:2469. 温度转换(python3解法,数学相关算法题)
  • docker swarm 启动容器报错日志查看方式
  • OpenHarmony 5.0中状态栏添加以太网状态栏图标以及功能实现
  • HTA8127内置升压的77W单体声D类音频功放
  • Vue3中reactive响应式使用注意事项
  • 【Java高阶面经:消息队列篇】24、Kafka消息顺序保障:单分区与多分区的性能优化
  • 贪心算法套路模板+详细适用场景+经典题目清单
  • 【PalladiumZ2 使用专栏 3 -- 信号值的获取与设置 及 memory dump 与 memory load】
  • MongoDB配置SSL
  • 【Fifty Project - D30】
  • 手抖人群饮食指南:科学膳食助力缓解震颤
  • MYSQL优化(1)
  • Python训练营打卡Day34
  • leetcode hot100刷题日记——12.反转链表
  • STM32开发环境配置——VSCode+PlatformIO + CubeMX + FreeRTOS的集成环境配置
  • 遥感解译项目Land-Cover-Semantic-Segmentation-PyTorch之一推理模型
  • uni-app(4):js语法、css语法
  • hugging-face数据集快速下载
  • 深度学习笔记24-LSTM火灾预测(Ptorch)
  • nginx 的反向代理 负载均衡 动静分离 重写
  • PyQt学习系列11-综合项目:多语言文件管理器
  • Selenium元素定位的8种核心方法详解
  • 湖北理元理律师事务所债务优化方案:让还款与生活平衡成为可能
  • 暗黑科技感风格智慧工地监管系统
  • 线性回归原理推导与应用(八):逻辑回归二分类乳腺癌数据分类
  • 机器人收硬币算法c++,完整代码可运行
  • 在TIA 博途中下载程序时找不到对应的网卡怎么办?