赞
踩
Hello,I'm Shendi
每当Java出新版本我会第一时间更新
目录
可以前往官网下载
或在文章最下方关注公众号在公众号内发送 100000 下载
初代版本,伟大的一个里程碑,但是是纯解释运行,使用外挂JIT,
性能比较差,运行速度慢
JDBC(Java DataBase Connectivity)
支持内部类
RMI(Remote Method Invocation)
反射
Java Bean
集合框架
JIT(Just In Time)编译器
对打包的Java文件进行数字签名
JFC(Java Foundation Classes)包括Swing1.0,拖放和Java2D类库
Java插件
JDBC中引入可滚动结果集,BLOB,CLOB,批量更新和用户自定义类型
Applet中添加声音支持
Java Sound API
Jar文件索引
对Java的各个方面都做了大量优化和增强
XML处理
Java打印服务
Logging API
Java Web Start
JDBC 3.0API
断言
Preferences API
链式异常处理
支持IPV6
支持正则表达式
引入Image I/O API
泛型
增强循环,可以使用迭代方式
自动装箱与自动拆箱
类型安全的枚举
可变参数
底层就是一个数组,根据参数个数不同,会创建不同长度的数组
在传递时可以直接传递数组(传递数组后就不能再传递其余可变参数)
静态引入
元数据(注解)
Instrumentation
支持脚本语言
JDBC 4.0API
Java Compiler API
可插拔注解
增加对Native PKI(Public Key Infrastructure),Java GSS(Generic Security Service)
Kerberos和LDAP(Lightweight Directory Access Protocol)支持
继承Web Services
1.switch支持字符串变量
2.泛型实例化类型自动推断
ArrayList<String> list = new ArrayList<>();
3.新的整数字面表达方式 "ob"前缀 和 "_"连接符
1.表示二进制字面值的前缀ob
以下三个值相同
byte b1 = ob00100001;
byte b2 = 0x21;
byte b3 = 33;
2.字面常量数字的下划线.用下划线连接整数提升其可读性,自身无含义,不可用在数字的起始和末尾
Java编码语言对给数值型的字面值加下划线有严格的规定。如上所述,你只能在数字之间用下划线。你不能用把一个数字用下划线开头,或者已下划线结尾。这里有一些其它的不能在数值型字面值上用下划线的地方:
在数字的开始或结尾
对浮点型数字的小数点附件
F或L下标的前面
该数值型字面值是字符串类型的时候
float pi1 = 3_.1415F; // 无效的; 不能在小数点之前有下划线
float pi2 = 3._1415F; // 无效的; 不能在小数点之后有下划线
long socialSecurityNumber1=999_99_9999_L;//无效的,不能在L下标之前加下划线
int a1 = _52; // 这是一个下划线开头的标识符,不是个数字
int a2 = 5_2; // 有效
int a3 = 52_; // 无效的,不能以下划线结尾
int a4 = 5_______2; // 有效的
int a5 = 0_x52; // 无效,不能在0x之间有下划线
int a6 = 0x_52; // 无效的,不能在数字开头有下划线
int a7 = 0x5_2; // 有效的 (16进制数字)
int a8 = 0x52_; // 无效的,不能以下划线结尾
int a9 = 0_52; // 有效的(8进制数)
int a10 = 05_2; // 有效的(8进制数)
int a11 = 052_; // 无效的,不能以下划线结尾
4.在单个catch块中捕获多个异常,以及用升级版的类型检查重新抛出异常
catch代码块得到了升级,用以在单个catch块中处理多个异常,如果你要捕获多个异常并且它们包含相似的代码,使用这一特性会减少代码重复
catch(IOException | SQLException | Exception ex) {
}
这种情况下ex变量是final的
5.try-with-resources语句
try-with-resources语句是一个声明一个或多个资源的try语句,一个资源作为一个对象,必须在程序结束后关闭
try-with-resources语句确保在语句的最后每个资源都被关闭,任何实现了Java.lang.AutoCloseable和java.io.Closeable的对象都可以使用try-with-resource来实现异常处理和关闭资源
try-with-resource可以声明多个资源(声明语句之间用分好分割,最后一个可忽略分号)
try (流创建等需要关闭的资源打开操作,多个之间用;隔开) {操作} catch(Exception 这里可加catch可不加) {}
引入JavaNIO.2开发包
null值的自动处理
Lambda表达式
Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)
方法引用
方法引用提供了非常有用的语法,可以直接引用已有的Java类或对象(实例)的方法或构造器.
与lambda联合使用,方法引用可以使语言的构造更紧凑简洁,减少冗余代码
默认方法
默认方法就是一个在接口里面有了一个实现的方法
新工具
新的编译工具 如:Nashorn引擎 jjs 类依赖分析器jdeps
Stream API
新添加的Stream API(java.utils.stream)把真正的函数式编程风格引入到Java中
Data Time API
加强对日期与时间的处理
Optional类
Optional类已经成为Java8类库的一部分,可用来解决空指针异常
Nashorn,JavaScript引擎
Java8提供了一个新的Nashorn JavaScript引擎,它允许我们在JVM上运行特定的JavaScript应用
模块系统
模块是一个包的容器,Java9最大的变化之一是引入了模块系统(Jigsaw项目)
REPL(JShell)
交互式编程环境
在cmd中输入JShell 可以帮你自动创建类
以及运行一些简单的方法
HTTP2客户端
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
可以标记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
Java9中引入了新的响应式流API来支持Java9中的响应式编程
模块化
可定制JRE:更小的运行时镜像
更确定的模块依赖关系:避免Jar Hell问题
与 OSGI 的比较
模块的定义:
模块是一个命名的,自我描述的代码和数据的集合
模块的代码被组织成多个包,每个包中包含Java类和接口
模块的数据则包括资源文件和其他静态信息
模块声明文件
模块声明文件:module-info.java
新的关键字:module 声明一个模块
模块名称的规则 与Java包的命名规则相似
JEP286,var局部变量类型推断
JEP296,将原来用Mercurial管理的众多JDK仓库代码,合并到一个仓库中,简化开发和管理过程
JEP304,统一的垃圾回收接口
JEP307,G1垃圾回收器的并行完整垃圾回收,实现并行性来改善最坏情况下的延迟
JEP310,应用程序类数据(AppCDS)共享,通过跨进共享通用类元数据来减少内存占用空间,和减少启动时间
JEP312,ThreadLocal握手交互.在不进入到全局JVM安全点(Safepoint)的情况下,对线程执行回调,优化可以只停止单个线程,而不是停全部线程或一个都不停
JEP313,移除JDK中附带的javah工具,可以使用javac -h代替
JEP314,使用附加的Unicode语言标记扩展
JEP317,能将堆内存占用分配给用户指定的备用内存设备
JEP317,使用Graal基于Java的编译器,可以预先把Java代码编译成本地代码来提升效能
JEP318,在OpenJDK中提供一组默认的根证书颁发机构证书,开源目前Oracle提供的JavaSE的根证书,这样OpenJDK对开发人员使用起来更方便
JEP322,基于时间定义的发布版本,即上述提到的发布周期,版本号为...分别是大版本,中间版本,升级包和补丁版本
181:Nest_Based访问控制
309:动态类文件常量
315:改善Aarch64 intrinsic
318:无操作垃圾收集器ZGC
320:消除Java EE和CORBA模块
321:HTTP客户端(标准)
323:局部变量的语法?参数
324:Curve25519和Curve448关键协议
327:Unicode 10
328:飞行记录器
329:ChaCha20和Poly1305加密算法
330:发射一列纵队源代码程序
331:低开销堆分析
332:传输层安全性(Transport Layer Security,TLS)1.3
333:动作,一个可伸缩的低延迟垃圾收集器(实验)
335:反对Nashorn JavaScript引擎
336:反对Pack200工具和API
在Java12中,switch可以有返回值 并且使用->直接
break可以携带返回值,如果需要break返回值,则需每一个case后都有返回值或者抛出一个异常
int num = switch(value) {
case 1 ->1;
case 2 ->2;
case 3,4 ->3;
case 5: break 5;
case 6 -> {System.out.println("hello world");//没有返回则抛出异常}
}
Java13中,switch支持如下写法
int date = switch (day) {
case MONDAY, FRIDAY, SUNDAY : yield 6;
case TUESDAY : yield 7;
case THURSDAY, SATURDAY : yield 8;
case WEDNESDAY : yield 9;
default : yield 1; // default条件是必须的
};
支持文本块 使用三个"""
起始的"""结尾必须换行
String text = """
hello world
! """
文本块是在13中是预览功能,使用前需要先启用
手动编译:
javac --release 13 --enable-preview ...
手动运行
java --enable-preview ...
改进的switch表达式在14中获得了完全的支持
instanceof支持模式匹配(语言特性 预览特性)
使用instanceof和instanceof里的对象不用强转了
NullPointerException(JVM特性)
14的这个异常更加详细,精确到某个属性
Record(预览功能)
java14提供了解决get,set,toString等代码冗余,
Record会提供equals,hashCode,toString方法的实体,可以重构如下
public record Clazz(int a,double b,String c) {}
通过record,可以自动地得到equals,hashCode,toString的实现,还有构造器和getter方法
文本块中加入 \ 可以不换行
文本块转正
ZGC垃圾回收器转正
Shenandoah转正
移除 Nashorn JavaScript Engine(JDK脚本执行引擎)
在JDK11标记过期,15完全移除
CharSequence新增isEmpty默认方法
向量API(孵化)
提供了jdk.incubator.vector来用于矢量计算
启用c++ 14 语言特性
从Mercurial迁移到Git
迁移到GitHub(将OpenJDK源码的版本控制迁移到github上)
ZGC 并发线程堆栈处理
Unix-Domain 套接字通道
为socket channel和server-socket channel api增加Unix-domain(AF_UNIX)套接字支持。
Alpine Linux Port
Elastic Metaspace
Windows/AArch64 Port
Foreign Linker API(孵化)
提供jdk.incubator.foreign来简化native code的调用
基于值的类的警告
提供注解 @jdk.internal.ValueBased 来用于标注作为value-based的类
将原始包装类指定为基于值的类,并弃用它们的构造函数以便删除,并提示新的弃用警告。提供关于在Java平台中任何基于值类的实例上进行同步的警告。
打包工具
在JDK 16中转正,从 jdk.incubator.jpackage 转为 jdk.jpackage
用于打包自包含的Java应用程序
外部内存访问API(第三次孵化)
引入一个API,允许Java程序安全有效地访问Java堆之外的外部内存
为 instanceof 进行模式匹配
在JDK 16中转正,可以如下使用
Object o = new String("");
if (o instanceof String str) {
System.out.println(str.concat("模式匹配"));
}
Records
在JDK 16中转正
对内部API进行更多封装,鼓励开发者从使用内部的方法迁移到标准API
Sealed Classes
发行说明: https://www.oracle.com/java/technologies/javase/17-relnote-issues.html
- FileSystemView fsv = FileSystemView.getFileSystemView();
- Icon icon = fsv.getSystemIcon(new File("application.exe"), 64, 64);
- JLabel label = new JLabel(icon);
- static void ServerSocket.setSocketFactory?(SocketImplFactory fac)
- static void Socket.setSocketImplFactory?(SocketImplFactory fac)
- static void DatagramSocket.setDatagramSocketImplFactory?(DatagramSocketImplFactory fac)
发行说明:https://www.oracle.com/java/technologies/javase/18-relnote-issues.html
[用于核心库改进和更新]
从 JDK 18 开始,UTF-8 是 Java SE API 的默认字符集.
依赖于默认字符集的 API 现在在所有 JDK 实现中表现一致,并且独立于用户的操作系统、语言环境和配置
jwebserver, 一个用于启动最小静态 Web 服务器的命令行工具, 已经被引入.
该工具和随附的 API 位于 jdk.httpserver 模块的 com.sun.net.httpserver 包中,旨在用于原型设计、临时编码和测试,尤其是在教育环境中。
使用方法句柄重新实现核心反射。依赖于现有实现的高度实现特定和未记录方面的代码可能会受到影响。可能出现的问题包括:
检查内部生成的反射类(例如 的子类MagicAccessorImpl)的代码不再有效,必须更新。
尝试破坏封装并将 的私有 finalmodifiers字段Method的值更改为Field与Constructor基础成员不同的类的代码可能会导致运行时错误。必须更新此类代码。
为了减轻这种兼容性风险,您可以启用旧实现作为解决方法
方法是使用 -Djdk.reflect.useDirectMethodHandle=false.
我们将在未来的版本中删除旧的核心反射实现。-Djdk.reflect.useDirectMethodHandle=false解决方法将在此时停止工作。
为主机名和地址解析引入服务提供者接口 (SPI),以便 java.net.InetAddress 可以使用平台内置解析器以外的解析器。这个新的 SPI 允许替换操作系统的本地解析器,该解析器通常配置为使用本地主机文件和域名系统 (DNS) 的组合。
[用于工具改进]
为 JavaDoc 的标准 Doclet 添加了一个 @snippet 标记,以简化在 API 文档中包含示例源代码。
[用于预览和孵化器]
引入一个 API 来表达向量计算,该计算可以在运行时可靠地编译为支持的 CPU 架构上的最佳向量指令,从而实现优于等效标量计算的性能。
引入一个 API,Java 程序可以通过该 API 与 Java 运行时之外的代码和数据进行互操作。通过有效地调用外部函数(即 JVM 之外的代码)和安全地访问外部内存(即不受 JVM 管理的内存),API 使 Java 程序能够调用本机库并处理本机数据,而不会出现脆弱性和危险。 JNI。
[规范/语言]
通过对 switch 表达式和语句的模式匹配以及对模式语言的扩展来增强 Java 编程语言。将模式匹配扩展到 switch 允许针对多个模式测试表达式,每个模式都有特定的操作,因此可以简洁安全地表达复杂的面向数据的查询。
发行说明:https://www.oracle.com/java/technologies/javase/19-relnote-issues.html
[主要新功能]
[并发模型更新预览]
将虚拟线程引入Java平台。虚拟线程是轻量级线程,可以大大减少编写、维护和观察高吞吐量并发应用程序的工作量。这是一个预览API。
通过引入结构化并发API简化多线程编程。结构化并发将在不同线程中运行的多个任务视为单个工作单元,从而简化错误处理和消除,提高可靠性,增强可观察性。这是一个孵化API。
[语言功能预览]
使用Record模式增强Java编程语言,以解构记录值。可以嵌套Record模式和类型模式,以实现强大、声明性和可组合的数据导航和处理形式。这是一个预览语言功能。
使用switch表达式和语句的模式匹配增强Java编程语言。将模式匹配扩展到switch允许根据多个模式对表达式进行测试,每个模式都有一个特定的操作,从而可以简洁、安全地表达复杂的面向数据的查询。这是一个预览语言功能。
[Libraries 预览/孵化器]
引入一个API,通过该API,Java程序可以与Java运行时之外的代码和数据进行互操作。通过有效地调用外部函数(即JVM外部的代码),并通过安全地访问外部内存(即不由JVM管理的内存),API使Java程序能够调用本机库并处理本机数据,而不会出现JNI的脆弱性和危险性。这是一个预览API。
引入一个API来表示向量计算,该API在运行时可靠地编译为支持的CPU架构上的最优向量指令,从而实现优于等效标量计算的性能。
[新功能]-增强功能
[core-libs/java.lang]
java.lang.Character类支持14.0级的Unicode字符数据库,该数据库增加了838个字符,总共144697个字符。这些新增内容包括5个新脚本,总共159个脚本,以及37个新表情符号字符。
这些系统属性的值是标准输出和标准错误流(system.out和system.err)使用的编码。
[core-libs/java.net]
[core-libs/java.time]
[core-libs/java.util:collections]
[security-libs/java.security]
[security-libs/javax.net.ssl]
[security-libs/jdk.security]
[hotspot/compiler]
[hotspot/runtime]
……
[删除的功能和选项]
[不推荐的功能和选项]
发行说明:https://jdk.java.net/20/release-notes
除了数千次性能、稳定性和安全性更新外,Java 20还提供了数十项新功能和增强功能,其中七项增强功能的重要性足以保证他们自己的JDK增强建议(JEP),包括四项预览功能和三项孵化器功能。
[新功能]
[TLS Key Exchange Named Groups]
[security-libs/javax.net.ssl]
新的API javax.net.ssl.SSLParameters.getNamedGroups() 和 javax.net.ssl.SSLParameters.setNamedGroups()
[如果检测到错误的java.io.tmpdir设置,则打印标准错误警告]
[core-libs/java.lang]
[支持Unicode 15.0]
[core-libs/java.lang]
[Add GarbageCollectorMXBean for Remark and Cleanup Pause Time in G1]
[hotspot/gc]
一个名为“G1并发GC”的新GarbageCollectorMXBean已添加到G1垃圾收集器中。
[新JFR事件:jdk.InitialSecurityProperty、jdk.SecurityProviderService]
[Provide Poly1305 Intrinsic on x86_64 platforms with AVX512 instructions]
[在x86_64和aarch64平台上提供ChaCha20 Intrinsics]
[新的“jmod--compression”命令行选项]
jmod工具中添加了一个新的--compression命令行选项,用于在创建jmod归档时指定压缩级别。可接受的值是zip-[0-9],其中zip-0不提供压缩,而zip-9提供最佳压缩。默认为zip-6。
[Javac警告复合赋值中的类型转换可能有误]
javac中添加了新的lint选项有损转换,以警告可能有损转换的复合赋值中的类型转换。如果复合赋值的右侧操作数的类型与变量的类型不兼容,则隐含强制转换,并且可能发生有损转换。
可以使用 @SuppressWarnings("lossy-conversions") 来抑制新的警告。
[删除的功能和选项]
[Thread.shupend()、Thread.resume()、Thread.stop()更改为抛出UnsupportedOperationException异常]
[G1并发细化线程的控制已被完全取代]
[删除对javac-source/-target/-版本7的支持]
[弃用的功能和选项]
[java.net.URL构造函数已弃用]
[弃用用于删除的JMX Management Applets]
[其他注意事项]
[HTTP响应的读取流在中断时抛出IOException]
[HttpClient默认保持活动时间为30秒]
[添加了HTTP/2的空闲连接超时]
发行说明:https://www.oracle.com/java/technologies/javase/21-relnote-issues.html
openjdk(包括详细功能等):https://openjdk.org/projects/jdk/21/
[主要新功能]
[语言特点]
记录模式(record关键词),参见JEP440:https://openjdk.org/jeps/440
switch的匹配,参见JEP441:https://openjdk.org/jeps/441
switch支持返回值了,还可以case null了,可以使用 -> 替代 break,支持 case when的格式等
[功能预览]
字符串模板,参见JEP430:https://openjdk.org/jeps/430
Unnamed Patterns and Variables,参见JEP443:https://openjdk.org/jeps/443
使用匿名模式和匿名变量来增强Java语言,匿名模式匹配record而不用说明组件名称或类型,匿名变量可以初始化但不使用,两者都用下划线 _ 表示
Unnamed Classes and Instance Main Methods,参见JEP445:https://openjdk.org/jeps/445
JEP上的说明是为了让更加容易让初学者学习,因为初学者刚开始应首先体验到编写程序,而不需要知道类的概念,包括main的args参数等,这个功能可以像C一样编写hello,world...
[库改进]
指优化,修复或新增到库
虚拟线程,参见JEP444:https://openjdk.org/jeps/444
将虚拟线程引入Java平台。虚拟线程是轻量级线程,可以显著减少编写、维护和观察高吞吐量并发应用程序的工作量。
就像其他语言的协程,对于使用者来说,能不使用线程尽量不使用线程...
Sequenced Collections,参见JEP431:https://openjdk.org/jeps/431
新的有序集合,对比
类 | 获取第一个元素 | 获取最后一个元素 |
---|---|---|
List | list.get(0) | list.get(list.size() - 1) |
Deque | deque.getFirst() | deque.getLast() |
SortedSet | sortedSet.first() | sortedSet.last() |
LinkedHashSet | linkedHashSet.iterator().next() | // missing |
Key Encapsulation Mechanism API,参见JEP452:https://openjdk.org/jeps/452
介绍一种用于密钥封装机制(KEM)的API,这是一种使用公钥加密来保护对称密钥的加密技术。
[预览,改进/新增]
外部函数和内存API(第三次预览)
结构化并发(预览)
作用域值(预览)
矢量API(第六个培养箱)
[性能改进]
Generational ZGC,参见JEP439:https://openjdk.org/jeps/439
通过扩展Z垃圾回收器(ZGC)来维护年轻对象和旧对象的独立生成,从而提高应用程序性能。这将使ZGC能够更频繁地收集年轻的物体——这些物体往往英年早逝。
[管理和维护]
准备禁止动态加载代理
当代理被动态加载到正在运行的JVM中时,发出警告。这些警告旨在让用户为未来的版本做好准备,该版本默认不允许动态加载代理,以提高完整性。在启动时加载代理的可维护性工具在任何版本中都不会导致发出警告。
[新功能]
[core-libs/java.lang]
[core-libs/java.net] java.net.http.HttpClient现在可自动关闭
[core-libs/java.nio.charsets] 支持GB18030-2022
[core-libs/java.util] StringBuild和StringBuffer增加新的函数repeat
[core-libs/java.util.regex] RegEx中与表情符号相关的二进制属性
...
[删除的功能和选项]
[core-libs/java.io] java.io.File的规范路径缓存被删除
[core-libs/java.lang]
[core-libs/java.util.jar] 删除JAR索引功能
[core-svc/javax.management] 删除javax.management.remote.rmi.RMIIIOPServerImpl
[hotspot/gc] 删除G1热卡缓存
...
<br>
JDK 22将根据这些条款接收更新,直到2024年9月,届时它将被JDK 23取代
发行说明:https://www.oracle.com/java/technologies/javase/22-relnote-issues.html
[主要新功能]
[语言特点]
Unnamed Variables & Patterns,参见JEP 456:https://openjdk.org/jeps/456
Java21的预览,在这里正式了。
未命名变量和模式,它旨在提高代码的可读性和可维护性。该特性允许开发人员在必须使用变量声明或嵌套模式,但又从未使用过这些变量或模式的情况下,使用未命名的方式来标记这些变量和模式。
在Java编程中,有时需要声明一些变量或模式,但实际上并不打算在代码中使用它们。
例如,在catch子句中,需要声明一个异常变量,但实际上并不打算对其进行任何操作。在这种情况下,使用未命名变量和模式可以使代码更加简洁和清晰。
例如 for-each:for (Test _ : tests) {}
未命名变量和模式使用下划线字符“_”来表示。
[语言预览]
Statements before super(...) (Preview),参见JEP 447:https://openjdk.org/jeps/447
JEP 447是Java平台的一个改进提案(Java Enhancement Proposal),其主要目标是放宽Java构造函数中对语句顺序的限制,特别是在构造函数中显式调用另一个构造函数(即super调用)之前的语句限制。
在传统Java中,要求构造函数中对另一个构造函数的显式调用(即super调用)必须是第一条语句。这个限制确保了构造函数的执行顺序是自上而下的,并防止了在超类构造函数完成其初始化工作之前访问未初始化的字段。然而,这种限制也限制了构造函数逻辑的表达性和可读性,因为有时我们可能需要在super调用之前执行一些不引用正在创建的实例的语句。
JEP 447放宽了这些限制,允许在显式调用super之前出现不引用正在创建的实例的语句。这意味着,现在可以在辅助方法、中间构造函数或构造函数参数之前执行某些逻辑,而这些逻辑之前必须放在super调用之后。
Stream Gatherers (Preview),参见 JEP 461:https://openjdk.org/jeps/461
JEP 461的引入使得流处理更加简洁和直观。在以前的Java版本中,虽然也可以对流进行聚合操作,但通常需要编写额外的代码或使用第三方库来实现。现在,通过内置的流聚合器,开发者可以直接在流上调用相应的聚合方法,从而简化了代码并提高了可读性。
假设我们有一个整数列表,我们想要计算这个列表中所有数字的总和。在Java 8及以后的版本中,我们可以使用流(Stream)来实现这个功能。但在JEP 461之前,我们可能需要这样写代码:
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); int sum = numbers.stream().mapToInt(Integer::intValue).sum(); System.out.println("总和: " + sum);在之后,可以直接
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5); int sum = numbers.stream().sum();
字符串模板 (二次预览),参见JEP459:https://openjdk.org/jeps/459
Implicitly Declared Classes and Instance Main Methods (二次预览),参见JEP463:https://openjdk.org/jeps/463
同 Java21 的Unnamed Classes and Instance Main Methods JEP445
[库]
外部函数和内存API,这里正式了,参见 JEP454:https://openjdk.org/jeps/454
[库预览和孵化器]
类文件API(预览),参见JEP457:https://openjdk.org/jeps/457
提供一个标准的API,用于解析、生成和转换Java类文件。
Structured Concurrency(二次预览),参见JEP462:https://openjdk.org/jeps/462
通过引入用于结构化并发的API来简化并发编程。结构化并发将在不同线程中运行的相关任务组视为单个工作单元,从而简化错误处理和消除,提高可靠性,并增强可观察性
Scoped Values (二次预览),参见JEP464:https://openjdk.org/jeps/464
引入作用域值,使不可变数据能够与同一线程中的子帧和子线程进行托管共享。作用域值比线程本地变量更容易推理,并且空间和时间成本更低,尤其是与虚拟线程和结构化并发结合使用时。
Vector API (Seventh Incubator),参见JEP460:https://openjdk.org/jeps/460
引入API来表示向量计算,这些向量计算在运行时可靠地编译为支持的CPU架构上的最佳向量指令,从而实现优于等效标量计算的性能。
[新功能]
支持Unicode 15.1
TCP_KEEPxxxx扩展套接字选项现在在Windows平台上受支持
32位UTF字符集的新常量,java.nio.charset中的以下三个新常量。StandardCharsets类已经引入:UTF_32,UTF_32BE,UTF_32LE
区域设置相关列表模式
基于UnicodeConsortium的LDML规范,引入了一个新的类ListFormat,它处理与区域设置相关的列表模式。例如,由三个字符串组成的列表:“Foo”、“Bar”和“Baz”在美式英语中通常格式化为“Foo,Bar,and Baz”,而在法语中则格式化为“Foo,Bar et Baz”
ListFormat.getInstance().format(List.of("Foo", "Bar", "Baz"))
java.util.random.RandomGenerator新增equiDoubles()函数
HSS/LMS:密钥工具和jarsigner更改
jarsigner和keytool工具已经更新,以支持分层签名系统/雷顿-米卡利签名(HSS/LMS)签名算法。jarsigner支持使用HSS/LMS对JAR文件进行签名,并验证使用HSS/LMS签名的JAR文件,而keytool支持生成HSS/LMS密钥对。
将Java的XML Security更新到3.0.3
inheritDoc标记和方法注释算法已更改
向JDK XML模块添加内置目录
添加JDK属性以指定DTD支持
引入了一个新的属性jdk.xml.dtd.support,用于确定xml处理器如何处理dtd
@Deprecated方法的JFR事件
[删除的功能和选项]
sun.misc.Unsafe.shouldBeInitialized和ensureClassInitialized被删除
Thread.countStackFrames被删除
旧的核心反射实现已被删除
Jdeps-profile和-P选项已被删除
[弃用的功能和选项]
sun.misc.Unsafe park, unpark, getLoadAverage,和xxxFence函数已弃用,计划移除
-Xnoagent选项已弃用,计划移除
jdk.crypto.ec模块的弃用
-Xdebug和-debug选项已弃用,计划移除
...
持续更新中...
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。