jdk9 , 10, 11, 12, 13, 14,15,15,16,有什么新特性

JDK 9到21核心新特性概览

从 JDK 9 到 JDK 16,Java 每个版本都带来了不少新特性。以下是各版本的主要更新汇总:


✅ JDK 9(2017年9月)

  • 模块系统(Project Jigsaw):引入模块化,支持将代码组织为模块,提升可维护性和性能。

  • JShell:交互式 REPL 工具,支持即时运行 Java 代码。

  • 集合工厂方法:如 List.of()Set.of()Map.of(),快速创建不可变集合。

  • 改进的 Stream API:新增方法如 takeWhiledropWhile

  • 接口私有方法:接口中可定义私有方法。

  • ProcessHandle API:增强对操作系统进程的控制。

  • Try-With-Resources 改进:可在 try 外声明资源。

  • @Deprecated 增强:新增 sinceforRemoval 属性。


✅ JDK 10(2018年3月)

  • 局部变量类型推断(var):简化变量声明,如 var list = new ArrayList<String>()

  • G1 垃圾回收器并行化 Full GC:提升性能。

  • 线程本地握手(Thread-Local Handshakes):优化 JVM 性能。

  • 应用类数据共享(AppCDS):缩短启动时间。


✅ JDK 11(2018年9月,LTS)

  • HTTP Client API(标准化):支持 HTTP/1.1、HTTP/2、WebSocket。

  • 字符串增强方法:如 isBlank()lines()repeat()strip()

  • Lambda 参数局部变量语法支持 var

  • ZGC 垃圾收集器(实验性):低延迟、可扩展。

  • 支持单文件源码运行:如 java HelloWorld.java

  • Flight Recorder(JFR):低开销的性能监控工具。

  • TLS 1.3 支持

  • 移除 JavaFX、Java EE 模块


✅ JDK 12(2019年3月)

  • Switch 表达式(预览):支持箭头语法和返回值。

  • Shenandoah GC(低暂停时间垃圾回收器)

  • G1 GC 优化:将垃圾分为强制和可选部分。

  • 新增 NumberFormat、Files.mismatch() 等方法

  • Unicode 11 支持


✅ JDK 13(2019年9月)

  • Switch 表达式(第二次预览)

  • 文本块(Text Blocks,预览):支持多行字符串。

  • Socket API 重新实现

  • ZGC 支持 macOS 和 Windows


✅ JDK 14(2020年3月)

  • Switch 表达式(正式)

  • instanceof 模式匹配(预览):简化类型判断和转换。

  • Records(预览):简化数据载体类的定义。

  • 文本块(第二次预览)

  • 移除 CMS 垃圾回收器

  • ZGC 支持 Windows/macOS


✅ JDK 15(2020年9月)

  • 密封类(Sealed Classes,预览):限制类的继承。

  • 文本块(正式)

  • Records(第二次预览)

  • instanceof 模式匹配(第二次预览)

  • ZGC 和 Shenandoah GC 成为正式特性

  • 移除 Nashorn JavaScript 引擎

  • EdDSA 数字签名算法支持


✅ JDK 16(2021年3月)

  • Records(正式)

  • instanceof 模式匹配(正式)

  • 密封类(第二次预览)

  • 向量 API(孵化器)

  • Unix-Domain 套接字通道支持

  • 打包工具 jpackage(正式):支持打包原生应用。

  • ZGC 并发线程处理优化

  • 弹性元空间(Elastic Metaspace)

  • 默认强封装 JDK 内部元素

  • C++14 支持 JDK 源码

  • GitHub 成为 OpenJDK 官方代码托管平台


如需查看每个特性的详细用法或示例代码,我可以继续为你展开。是否需要我挑几个重点特性详细讲解?

复制

分享

java var使用

复制

分享

Java 10 开始引入的 var 并不是“动态类型”,而是局部变量类型推断
编译器在编译期根据右侧表达式推断出具体类型,之后不可更改,仍是强类型。

一句话记忆:
“写起来像 JS,跑起来还是 Java。”


  1. 基本用法

java

复制

var name = "hello";        // 推断为 String
var list = new ArrayList<String>(); // 推断为 ArrayList<String>
var stream = list.stream();         // 推断为 Stream<String>

编译后等价于显式写出类型,字节码里并没有 var 这个关键字。


  1. 能用的地方(局部变量) ✅ 方法体内的局部变量
    ✅ for 循环索引
    ✅ try-with-resources 资源

java

复制

for (var s : List.of("a", "b")) {   // s 推断为 String
    System.out.println(s);
}

try (var in = new FileInputStream("file.txt")) { // in 推断为 FileInputStream
    ...
}

  1. 不能用的地方 ❌ 成员变量(字段)
    ❌ 方法参数、返回值类型
    ❌ 没有初始值的情况
    ❌ 数组初始化时左侧

java

复制

var x;          // 编译错误:无法推断
var[] arr = {1,2,3}; // 错误,数组左侧不能写 var

  1. 注意点 & 最佳实践

  • 保持可读性:右侧类型不明显时显式写出类型

    java

    复制

    var result = service.call();   // 不知道返回啥,最好别用 var
  • 不滥用:只在“类型显而易见”的场景使用,减少视觉噪音

  • 与钻石操作符配合:

    java

    复制

    var map = new HashMap<String, Integer>(); // 推断为 HashMap<String,Integer>

  1. 编译期验证

java

复制

var n = 10;
n = "abc";   // 编译错误:  incompatible types: String cannot be converted to int

变量 n 已被推断为 int,后续赋值必须兼容。


一句话总结
var 只是**“省键盘”**的语法糖,类型还是编译期确定,用完代码更简洁,但别让它掩盖了重要类型信息。

复制

分享

jdk18-21有什么功能

编辑

复制

分享

JDK 18 功能

JDK 21 LTS 功能 一览

下面按版本把 JDK 18 ➜ JDK 21 的主要功能/变化快速列一遍(只谈正式预览级别的新东西,bug-fix/性能小修小补不展开)。
所有特性均可在生产环境试用,但带“预览”字样的需加 --enable-preview 编译运行,且后续版本仍可能调整。


JDK 18(2022-03,非-LTS)

  1. UTF-8 默认charset(JEP 400)
    启动JVM时文件编码、<javac> 编码等默认就是 UTF-8,跨平台乱码问题基本终结。

  2. 简易 HTTP-File Server(JEP 408)
    命令行 java -m jdk.httpserver [/path] 秒级把当前目录变成静态下载站,测试/临时传文件神器。

  3. Vector API 第 3 孵化(JEP 417)
    通过 jdk.incubator.vector 在 Java 里写 SIMD,HotSpot 会编译成对应平台最佳向量指令。

  4. 代码片段片段化 API(Code Snippets in javadoc)(JEP 413)
    写 doc 时可直接 @snippet Hello.java 把源码区域嵌进文档,生成时自动语法高亮、行号。

  5. 互联网地址解析 SPI(JEP 418)
    允许为 InetAddress 提供自定义解析器(DoH、内部 DNS、Mock 等场景)。


JDK 19(2022-09,非-LTS)

  1. 虚拟线程(Virtual Threads)——第一次预览(JEP 425)
    由 JVM 托管的轻量级线程,创建数百万个也扛得住;与旧 Thread API 100% 兼容。

  2. 结构化并发(Structured Concurrency)——孵化(JEP 428)
    把多条虚拟线程/平台线程看成一个“工作单元”,异常传播、取消、超时更容易管理。

  3. 外部函数 & 内存 API(FFM)——预览(JEP 424)
    安全替代 JNI,直接调用 native 库、访问堆外内存,无 Unsafe 风险。

  4. Vector API 第 4 孵化(JEP 426)

  5. Switch 模式匹配——第三次预览(JEP 427)
    支持在 case 里直接写类型模式、record 解构、带 when 守卫条件。

  6. Linux/RISC-V 端口正式合入
    官方可在 RV64 上跑 Java。


JDK 20(2023-03,非-LTS)

全部处于“预览/孵化”阶段,为 21 LTS 做最后验证

  1. 虚拟线程 —— 第二次预览(JEP 437)
    继续打磨 API、调试/监控工具链。

  2. 结构化并发 —— 第二次孵化(JEP 437)
    StructuredTaskScope 支持继承 作用域值(ScopedValue)

  3. 作用域值(Scoped Values)——孵化(JEP 429)
    线程安全、不可变的“局部变量”传递,可跨虚拟线程共享,替代 ThreadLocal

  4. 记录模式(Record Patterns)——第二次预览(JEP 432)
    可在 instanceof / switch 中直接解构记录,支持嵌套。

  5. Switch 模式匹配 —— 第四次预览(JEP 433)

  6. Vector API —— 第五次孵化(JEP 438)


JDK 21(2023-09,LTS

  1. 虚拟线程正式落地(JEP 444)
    去掉预览开关,性能、调试、线程转储、JFR 事件全部就绪;Tomcat/Jetty/Netty/Spring 6.1 等已默认支持。

  2. Switch 模式匹配正式(JEP 441)
    支持类型模式、记录模式、null 匹配、守卫条件;可返回值的 switch 表达式写法完整收工。

  3. 记录模式正式(JEP 440)
    与上一条配合,可在 instanceof / switch 中直接 case Point(int x, int y) 解构。

  4. 序列化集合接口(JEP 431)
    新增 SequencedCollectionSequencedSetSequencedMap,统一“有先后顺序”的集合操作:
    addFirst / addLast / getFirst / getLast / reversed() 等。

  5. 字符串模板(预览)(JEP 430)
    STR."Hello \{name},今年\{age}岁" 插值写法,告别冗长拼接;可自定义模板处理器防 SQL / XSS 注入。

  6. 结构化并发(预览)(JEP 453)
    官方并发框架雏形,StructuredTaskScope 把子任务当成整体管理,异常/取消自动级联。

  7. 外部函数 & 内存 API(FFM)正式(JEP 442)
    取代 JNI,性能更高、内存安全,已提供 LinkerSymbolLookupMemorySegment 等稳定 API。

  8. 分代 ZGC(JEP 439)
    ZGC 支持年轻代+老年代分代收集,吞吐与内存占用大幅改善,仍保持亚毫秒级停顿。

  9. 未命名变量 & 模式(预览)(JEP 443)
    catchtry-with-resswitch 等场景用 _ 占位,避免起无意义变量名。

  10. 无名类 & 实例 main 方法(预览)(JEP 445)
    学生/脚本场景可直接写 void main() { println("Hi"); },无需 public class Hello { public static...

  11. 密钥封装机制 API(JEP 452)
    为后量子密码学提供标准接口,应对未来加密算法迁移。


一句话总结

  • 18 是“工具/编码友好”版本;

  • 19/20虚拟线程、FFM、模式匹配这些大招放到预览区让大家尝鲜;

  • 21 LTS 把它们全部转正并补齐了并发、集合、字符串、GC 等现代能力,可放心上生产
    想体验“百万并发+简捷语法+安全调原生库”,从 21 开始即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leijmdas

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值