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

从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,它是最新的长期支持版本。

相关文章:

  • 生成模型——Pix2Pix
  • 软件工程(八):UML类图的几种关系
  • 光流法(Optical Flow)
  • Python打卡训练营day30-库的导入
  • I.MX6ULL_Linux_系统篇(26) buildroot分析
  • 南京邮电大学《智能控制技术》期末抢救(上)
  • 高可用集群keepalived
  • 01_07小结
  • queue和priority_queue及其函数
  • 【438. 找到字符串中所有字母异位词】
  • Python训练营---Day34
  • 【昇腾开发者训练营:Dify大模型部署实战】MindIE + Dify + DeepSeek + Embedding模型 + Rerank模型
  • springboot集成日志配置文件
  • 信息学奥赛及各种程序设计竞赛中常见的名词解释
  • 通过contenteditable实现仿豆包智能输入框
  • 生成模型——PixelRNN与PixelCNN
  • 常见算法题目2 - 给定一个字符串,找出其中最长的不重复子串
  • MySQL慢日志——动态开启
  • (15)关于窗体的右键菜单的学习与使用,这关系到了信号与事件 event
  • 《C 语言内存函数超详细讲解:从 memcpy 到 memcmp 的原理与实战》
  • 做网站原型图/东莞网站营销
  • php彩票网站开发/海淀区seo搜索引擎
  • 网页美工设计视频/网站打开速度优化
  • 万维网域名注册网站/优化步骤
  • 美食网站/盐城网站优化
  • 需要外包团队做网站怎么提需求/seo每日工作内容