JDK历代版本新特性简述

JDK历代版本新特性简述(待更新)

参考文章:

https://blog.csdn.net/qq934235475/article/details/82220076

1.0

初代版本,纯解释运行,效率低

1.1

JDBC

支持内部类

RMI

反射

Java Bean

1.2

集合框架

JIT(Just In Time)编译器

对打包的Java文件进行数字签名

FC(Java Foundation Classes), 包括Swing 1.0, 拖放和Java2D类库

Java插件

JDBC中引入可滚动结果集,BLOB,CLOB,批量更新和用户自定义类型

Applet中添加声音支持

1.3

Java Sound API

jar文件索引

对Java的各个方面都做了大量优化和增强

1.4

XML处理;

Java打印服务;

Logging API;

Java Web Start;

JDBC 3.0 API;

断言;

Preferences API;

链式异常处理;

支持IPV6;

支持正则表达式;

引入Imgae I/O API.

5

泛型;

增强循环,可以使用迭代方式;

自动装箱与自动拆箱;

类型安全的枚举;

可变参数;

静态引入;

元数据(注解);

Instrumentation;

6

支持脚本语言;

JDBC 4.0API;

Java Compiler API;

可插拔注解;

增加对Native PKI(Public Key Infrastructure), Java GSS(Generic Security Service),Kerberos

LDAP(Lightweight Directory Access Protocol)支持;

继承Web Services;

7

switch语句块中允许以字符串作为分支条件;

在创建泛型对象时应用类型推断;

在一个语句块中捕获多种异常;

支持动态语言;

支持try-with-resources(在一个语句块中捕获多种异常);

引入Java NIO.2开发包;

数值类型可以用二进制字符串表示,并且可以在字符串表示中添加下划线;

钻石型语法(在创建泛型对象时应用类型推断);

null值得自动处理

8(长期支持(LTS)版本)

Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中。

Java Lambda表达式是一种简洁且易于阅读和维护的匿名函数。它可以传递给方法作为参数,或用于对集合进行筛选和处理等操作。Lambda表达式用于替代Java中的匿名内部类,能使代码更加简洁易懂,并具有更好的性能。Lambda表达式的引入,使得开发人员可以更加方便地处理集合对象的元素,同时还能够避免一些繁琐的步骤,从而提高了代码的可读性和可维护性。

方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有Java类或对象(实例)的方法或构造器。与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码。

通过::引用指定函数
1.静态方法引用:ClassName::staticMethodName
2.实例方法引用:instanceName::methodName
3.构造方法引用:ClassName::new
4.超类方法引用:super::methodName

默认方法 − 默认方法就是一个在接口里面有了一个实现的方法。

接口中可以使用default关键字定义一个默认方法,并再接口中提供一个实现,其他类实现该方法不需要实现该方法,,若实现了多个接口且都存在默认方法,则需要再实现类中覆盖默认方法,实现自己的逻辑,否则编译器会报错

新工具 − 新的编译工具,如:Nashorn引擎 jjs、 类依赖分析器jdeps。

jjs可以在JVM上运行JavaScript引擎,可用于执行JavaScript脚本文件或在交互模式下执行JavaScript代码
1.创建ScriptEngineManage对象
2.获取Nashorn引擎对象
3.执行javaScript代码:engine.eval,或可以执行文件,代码如下

try{
  FileReader reader = new FileReader("test.js");
  engine.eval(reader);
  reader.close;
}catch (ScriptException | IOException e){
  e.printStackTrace();
}

jdeps可以用来分析Java类或jar文件之间的依赖关系,通过jdeps命令,可以生成一个有关程序所需要的类及其来源的报告,分析循环依赖和强制依赖。

Stream API −新添加的Stream API(java.util.stream) 把真正的函数式编程风格引入到Java中。

Java 8中的Stream API是一种简单、声明式的集合操作工具,可用于过滤、映射、排序、归约等常见操作,代码更简洁易读且易于并行化。
可以使用 stream().filter().map().reduce() 这样的链式调用来一次性完成多个集合操作,而不需要创建中间变量或循环语句,同时支持并行处理,可以提高大型数据集处理的运行速度。

Date Time API − 加强对日期与时间的处理。

包含:LocalDate、LocalTime、LocalDateTime、ZonedDateTime(带时区信息)、Instant(距1970年1月1日到现在的毫秒数)、Duration(表示一段时间,精确到纳秒)、Period(日期间隔,例如两个日期之间差多少天、月、年。

Optional 类 − Optional 类已经成为 Java 8 类库的一部分,用来解决空指针异常。

方法:
1.创建Optional对象:Optional<String> optionalStr = Optional.of``Nullable``(str);(红色部分去掉后变成另一个方法
2.判断Optional对象是否包含值,使用isPresent方法
3.使用get方法获取Optional对象中的值,可以使用orElse方法指定当Optional对象不存在值时返回的默认值
4.处理Optional对象中的值,使用map()方法和flatMap()方法
使用map方法可以将Optional对象中的值转换成另一种类型,并返回一个新的Optional对象
使用flatMap方法可以将Optinal对象中的值转换成另一种Optional对象,并返回一个新的Optional对象

Nashorn, JavaScript 引擎 − Java 8提供了一个新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用。

见Java8中的新工具

详细参考: Java 8 新特性 | 菜鸟教程

9

模块系统:模块是一个包的容器,Java 9 最大的变化之一是引入了模块系统(Jigsaw 项目)。

REPL (JShell):交互式编程环境。

HTTP 2 客户端:HTTP/2标准是HTTP协议的最新版本,新的 HTTPClient API 支持 WebSocket 和 HTTP2 流以及服务器推送特性。

改进的 Javadoc:Javadoc 现在支持在 API 文档中的进行搜索。另外,Javadoc 的输出现在符合兼容 HTML5 标准。

多版本兼容 JAR 包:多版本兼容 JAR 功能能让你创建仅在特定版本的 Java 环境中运行库程序时选择使用的 class 版本。

集合工厂方法:List,Set 和 Map 接口中,新的静态工厂方法可以创建这些集合的不可变实例。

私有接口方法:在接口中使用private私有方法。我们可以使用 private 访问修饰符在接口中编写私有方法。

进程 API: 改进的 API 来控制和管理操作系统进程。引进 java.lang.ProcessHandle 及其嵌套接口 Info 来让开发者逃离时常因为要获取一个本地进程的 PID 而不得不使用本地代码的窘境。

改进的 Stream API:改进的 Stream API 添加了一些便利的方法,使流处理更容易,并使用收集器编写复杂的查询。

改进 try-with-resources:如果你已经有一个资源是 final 或等效于 final 变量,您可以在 try-with-resources 语句中使用该变量,而无需在 try-with-resources 语句中声明一个新变量。

改进的弃用注解 @Deprecated:注解 @Deprecated 可以标记 Java API 状态,可以表示被标记的 API 将会被移除,或者已经破坏。

改进钻石操作符(Diamond Operator) :匿名类可以使用钻石操作符(Diamond Operator)。

改进 Optional 类:java.util.Optional 添加了很多新的有用方法,Optional 可以直接转为 stream。

多分辨率图像 API:定义多分辨率图像API,开发者可以很容易的操作和展示不同分辨率的图像了。

改进的 CompletableFuture API : CompletableFuture 类的异步机制可以在 ProcessHandle.onExit 方法退出时执行操作。

轻量级的 JSON API:内置了一个轻量级的JSON API

响应式流(Reactive Streams) API: Java 9中引入了新的响应式流 API 来支持 Java 9 中的响应式编程。

详细参考:Java 9 新特性 | 菜鸟教程

10

JEP286,var 局部变量类型推断。

JEP296,将原来用 Mercurial 管理的众多 JDK 仓库代码,合并到一个仓库中,简化开发和管理过程。

JEP304,统一的垃圾回收接口。

JEP307,G1 垃圾回收器的并行完整垃圾回收,实现并行性来改善最坏情况下的延迟。

JEP310,应用程序类数据 (AppCDS) 共享,通过跨进程共享通用类元数据来减少内存占用空间,和减少启动时间。

JEP312,ThreadLocal 握手交互。在不进入到全局 JVM 安全点 (Safepoint) 的情况下,对线程执行回调。优化可以只停止单个线程,而不是停全部线程或一个都不停。

JEP313,移除 JDK 中附带的 javah 工具。可以使用 javac -h 代替。

JEP314,使用附加的 Unicode 语言标记扩展。

JEP317,能将堆内存占用分配给用户指定的备用内存设备,使用 Graal 基于 Java 的编译器,可以预先把 Java 代码编译成本地代码来提升效能。

JEP318,在 OpenJDK 中提供一组默认的根证书颁发机构证书。开源目前 Oracle 提供的的 Java SE 的根证书,这样 OpenJDK 对开发人员使用起来更方便。

JEP322,基于时间定义的发布版本,即上述提到的发布周期。版本号为$FEATURE.$INTERIM.$UPDATE.$PATCH,分别是大版本,中间版本,升级包和补丁版本。

11(长期支持(LTS)版本)

181:Nest-Based访问控制

309:动态类文件常量

315:改善Aarch64 intrinsic

318:无操作垃圾收集器

320:消除Java EE和CORBA模块

321:HTTP客户端(标准)

异步请求和响应处理、响应流式处理、支持HTTP/2和WebSocket协议、以及编程模型简单等。这些特性使得HTTP客户端API更加轻量、高效、易用。
响应流式处理指:逐步处理响应数据,不必将所有响应缓存到内存中

323:局部变量的语法λ参数

324:Curve25519和Curve448关键协议

327:Unicode 10

新增了56个Emoji字符
字符串代码点数量统计方法:在Java 11中,添加了一个新的String.codePoints()方法,它将返回一个IntStream对象,其中包含字符串中的所有代码点。
新增了Unicode 10的更新内容
新的Character.isXxx()方法:Java 11引入了一系列新的Character.isXxx()方法,用于检查字符是否属于不同的Unicode类别,例如字母、数字或符号等。

328:飞行记录器

329:ChaCha20和Poly1305加密算法

两个加密算法同时使用实现对网络通信数据加密,chacha20用来对数据进行加密,poly1305用来生成认证标签,接收端接收到消息后先用poly1305验证消息是否被篡改,未被篡改再用chacha20解密,主要用途使低功耗设备

330:发射一列纵队源代码程序

331:低开销堆分析

332:传输层安全性(Transport Layer Security,TLS)1.3

333:动作:一个可伸缩的低延迟垃圾收集器 (实验)

335:反对Nashorn JavaScript引擎

336:反对Pack200工具和API

12

作为“功能性版本”,JDK 12 总共包含 8 个新的 JEP ,分别为:

189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental) :新增一个名为 Shenandoah 的垃圾回收器,它通过在 Java 线程运行的同时进行疏散 (evacuation) 工作来减少停顿时间。

230: Microbenchmark Suite:新增一套微基准测试,使开发者能够基于现有的 Java Microbenchmark Harness(JMH)轻松测试 JDK 的性能,并创建新的基准测试。

325: Switch Expressions (Preview) :对 switch 语句进行扩展,使其可以用作语句或表达式,简化日常代码。

334: JVM Constants API :引入一个 API 来对关键类文件 (key class-file) 和运行时工件的名义描述(nominal descriptions)进行建模,特别是那些可从常量池加载的常量。

340: One AArch64 Port, Not Two :删除与 arm64 端口相关的所有源码,保留 32 位 ARM 移植和 64 位 aarch64 移植。

341: Default CDS Archives :默认生成类数据共享(CDS)存档。

344: Abortable Mixed Collections for G1 :当 G1 垃圾回收器的回收超过暂停目标,则能中止垃圾回收过程。

346: Promptly Return Unused Committed Memory from G1 :改进 G1 垃圾回收器,以便在空闲时自动将 Java 堆内存返回给操作系统。

13

350 Dynamic CDS Archives 对appCDS进行性了扩展,允许在Java应用执行结束时动态归档类。归档类包括包括默认的基础层CDS(class data-sharing) 存档中不存在的所有已加载的应用程序类和类库。通过此仿瓷提高了AppCDS的可用性;

351 ZGC: Uncommit Unused Memory 对ZGC进行了增强,在以前的版本中,java GC之后并不会将系统内存释放给OS,因为每次释放都意味着重新调整jvm的内存大小,存在一定的消耗;随着软件的发展,我们发现在很多时候内存是比较昂贵的资源,所以将不用的内存释放回去给OS是非常有必要的;此功能在默认情况下已开始,但可以通过-xx:-zuncommit参数禁用;注意:如果最新内存参数设置比最大内存参数大,那么此功能将隐式禁用。

353 Reimplement the Legacy Socket API 在这个版本中,将使用新的实现来代替java.net.socket和java.net.serversocket API的底层实现。新版本中旧的API还未删除,可以通过配置系统属性"jdk.net.useplansocketimpl"来使用他们。但默认实现是最新版本的。

354 Switch Expressions (Preview) 扩展开关,以便它可以用作语句或表达式,并且两种形式都可以使用传统的情况…:标签(带有贯穿线)或新案例…->标签(没有掉进去),还有一个新的语句,用于从开关表达式中产生值。这些变化将简化日常编码,并为在交换机中使用模式匹配做好准备。这是jdk 13中的一个预览语言特性。

355 Text Blocks (Preview) 向Java语言添加文本块。文本块是一个多行字符串文本,它避免了大多数转义序列的需要,自动以可预测的方式格式化字符串,并在需要时让开发人员控制格式。这是jdk 13中的一个预览语言特性。

14

305 Pattern Matching for instanceof (Preview) instanceof 的模式匹配(预览)

343 Packaging Tool (Incubator) 打包工具(孵化)

345 NUMA-Aware Memory Allocation for G1 G1 的NUMA 内存分配优化

349 JFR Event Streaming JFR事件流

352 Non-Volatile Mapped Byte Buffers 非原子性的字节缓冲区映射

358 Helpful NullPointerExceptions 非常有帮助的空指针异常

359 Records (Preview) Records(预览)

361 Switch Expressions (Standard) Switch 表达式(标准)

362 Deprecate the Solaris and SPARC Ports 弃用 Solaris 和S PARC 端口

363 Remove the Concurrent Mark Sweep (CMS) Garbage Collector 移除 CMS(Concurrent Mark Sweep)垃圾收集器

364 ZGC on macOS macOS 系统上的 ZGC

365 ZGC on Windows Windows 系统上的 ZGC

366 Deprecate the ParallelScavenge + SerialOld GC Combination 弃用 ParallelScavenge + SerialOld GC 组合

367 Remove the Pack200 Tools and API 移除Pack200 Tools和API

368 Text Blocks (Second Preview) 文本块(第二个预览版)

370 Foreign-Memory Access API (Incubator) 外部存储器API(孵化)

15

339 Edwards-Curve Digital Signature Algorithm (EdDSA) 蒙哥马利与扭曲爱德华曲线签名算法

360 Sealed Classes (Preview) 密封类(预览)

371 Hidden Classes 隐藏类

372 Remove the Nashorn JavaScript Engine 移除nasorn JavaScript引擎

373 Reimplement the Legacy DatagramSocket API 重新实现旧的DatagramSocket API

374 Disable and Deprecate Biased Locking 禁用和弃用偏置锁

375 Pattern Matching for instanceof (Second Preview) 模式匹配的instanceof(第二次预览)

377 ZGC: A Scalable Low-Latency Garbage Collector ZGC:一个可扩展的低延迟垃圾收集器

378 Text Blocks 文本块

379 Shenandoah: A Low-Pause-Time Garbage Collector Shenandoah:低暂停时间垃圾收集器

381 Remove the Solaris and SPARC Ports 移除Solaris和SPARC端口

383 Foreign-Memory Access API (Second Incubator) 外部内存访问API(第二个孵化器)

384 Records (Second Preview) 记录(第二次预览)

385 Deprecate RMI Activation for Removal 建议移除RMI激活

16

338 Vector API (Incubator) 病媒API(孵化器)

347 Enable C++14 Language Features 启用C++ 14种语言特性

357 Migrate from Mercurial to Git 从Mercurial迁移到Git

369 Migrate to GitHub 迁移到GitHub

376 ZGC: Concurrent Thread-Stack Processing ZGC:并发线程堆栈处理

380 Unix-Domain Socket Channels Unix-Domain 套接字通道

386 Alpine Linux Port Alpine Linux端口

387 Elastic Metaspace 弹性Metaspace

388 Windows/AArch64 Port Windows / AArch64端口

389 Foreign Linker API (Incubator) 国外连接器API(孵化器)

390 Warnings for Value-Based Classes 对基于值的类的警告

392 Packaging Tool 包装工具

393 Foreign-Memory Access API (Third Incubator) 外存储器访问API(第三孵化器)

394 Pattern Matching for instanceof instanceof匹配模式

395 Records 记录

396 Strongly Encapsulate JDK Internals by Default 默认情况下对JDK内部进行强封装

397 Sealed Classes (Second Preview) 密封类(第二次预览)

17(长期支持(LTS)版本)

306 Restore Always-Strict Floating-Point Semantics 恢复总是严格的浮点语义

356 Enhanced Pseudo-Random Number Generators 增强型伪随机数发生器

382 New macOS Rendering Pipeline 新的 macOS 渲染管道

391 macOS/AArch64 Port 将 JDK 移植到 macOS/AArch64

398 Deprecate the Applet API for Removal 不赞成删除 Applet API

403 Strongly Encapsulate JDK Internals 强封装 JDK 内部构件

406 Pattern Matching for switch (Preview) 模式匹配开关(预览)

407 Remove RMI Activation 删除 RMI 激活

409 Sealed Classes 封闭类别

通过限制谁能扩展或实现类和接口来提高代码可维护性。
原理是在定义父类是加sealed,并在类名后面写permits子类名,使得仅声明的子类可以继承父类,其他类继承在编译时会报错。

410 Remove the Experimental AOT and JIT Compiler 删除实验 AOT 和 JIT 编译器

411 Deprecate the Security Manager for Removal 请求删除安全管理器

412 Foreign Function & Memory API (Incubator) 外部函数与内存 API (孵化器)

414 Vector API (Second Incubator) 矢量 API (第二孵化器)

415 Context-Specific Deserialization Filters 特定于上下文的反序列化过滤器

18

400 UTF-8 by Default 默认 UTF-8

408 Simple Web Server 简单的网络服务器

413 Code Snippets in Java API Documentation 代码片段

416 Reimplement Core Reflection with Method Handles 重构 Reflection

417 Vector API (Third Incubator) 计算向量的 API

418 Internet-Address Resolution SPI 互联网地址解析 SPI

419 Foreign Function & Memory API (Second Incubator) 新API,让 JAVA 程序能够与其他非

JAVA 运行时的程序或数据进行交互

420 Pattern Matching for switch (Second Preview) 开关模式匹配

421 Deprecate Finalization for Removal 弃用 finalize

19

405 Record Patterns (Preview) 记录模式

422 Linux/RISC-V Port Linux/RISC-V 移植

424 Foreign Function & Memory API (Preview) 外部函数和内存 API

425 Virtual Threads (Preview) 虚拟线程

426 Vector API (Fourth Incubator) 向量 API

427 Pattern Matching for switch (Third Preview) Switch 模式匹配

428 Structured Concurrency (Incubator) 结构化并发

20

429 Scoped Values (Incubator) 作用域值 Scoped Value(孵化器)

432 Record Patterns (Second Preview) Record 模式(第二预览版)

433 Pattern Matching for switch (Fourth Preview) switch 模式匹配(第四预览版)

434 Foreign Function & Memory API (Second Preview) 外部函数内存 API(第2版)

436 Virtual Threads (Second Preview) 虚拟线程(第二个预览版)

437 Structured Concurrency (Second Incubator) 结构化并发(第二个孵化器版本)

438 Vector API (Fifth Incubator) Vector API(第五个孵化器版本)

interface MyFunction {

int apply(int x);

}

public class Main {

public static void main(String[] args) {

// 定义一个Lambda表达式

MyFunction doubleFunc = (x) -> x * 2;

// 应用Lambda表达式

int result = doubleFunc.apply(5);

System.out.println(result); // 输出:10

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值