Java 22 发布,新特性一览 java17新特性
yuyutoo 2024-10-23 16:40 12 浏览 0 评论
Java 22 发布于 2024 年 3 月 19 号。目前已经可以下载到不同供应商的构建版本了。推荐使用 Eclipse Temurin 的版本。
这个最新的 Java 版本有哪些新东西呢?我们来看一下。
首先介绍 Java 22 全新的功能。
第一个是 Class File API。这是解析、生成和转换 Java 类文件的标准 API。目前在处理 Java 的字节码时,必须用到第三方库,比如 ASM、BECL 或 Javassist。这些第三方库最大的问题是更新不够及时,无法适应 Java 现在 6个月一个版本的发布频率。Class File API 的出现,解决了更新不及时的问题。作为 Java 标准库的一部分,使用起来更方便,也更安全。
第二个是在构造器的 super(...) 和 this(...) 之前添加语句。我们在学习 Java的 时候,都会记得有一条语法规则:如果构造器使用了 super(...) 调用父类的构造器,或是 this(...) 调用当前类的其他构造器,调用的语句必须是构造器的第一条,否则就会出现编译错误。这是从 Java 1.0 就有的限制。这种限制是为了确保父类的字段先完成初始化。这种简单粗暴的一刀切的做法,虽然保证了安全性,但是带来了很多使用上的不变。在 Java 22 中,这个限制被去掉了。构造器的 super(...) 和 this(...) 之前可以添加语句,编译器会执行严格的检查,确保添加了语句之后,并不会破坏安全性。
第三个是流收集器。Java 8 推出的 Stream 在代码中的使用频率非常高。流的处理 pipeline 由 3个部分组成,分别是源,中间操作和终结操作。源是流中元素的来源,中间操作对元素进行处理,终结操作产生最后的结果或者是副作用。
一直以来,流处理的中间操作是不能自定义的,只能用 Stream 类中定义的那些。流收集器 Gatherer 接口的出现,使得我们可以创建自定义的流中间处理操作。比如我写的这个 Gatherer 的实现 DistinctBy,可以根据对象的属性值来去重。
第四个是 java 命令直接运行包含多个源代码文件的程序。在 Java 11 的时候,java 命令就可以运行单个 Java 源文件了。Java 22 把这个功能进行了增强,Java 程序中包含多个源文件时,也可以直接用 java 命令运行,并不需要先使用 javac 编译。
第五个与垃圾回收器 G1 有关,在 G1 中实现了区域锁定来降低延迟,在进入 JNI 临界区时不需要禁用 GC。
除了这5个新增的功能之外,有两个功能成为了正式功能。
未命名变量和模式,可以用下划线来指代未使用的变量,未使用的模式变量,和未使用的嵌套模式。
外部方法和内存API,这个API 是JNI的替代,可以高效地调用 JVM 之外的外部方法,安全访问 JVM 之外的外部内存。
最后是几个继续预览的功能:
字符串模板,允许在文本中嵌入表达式。
隐式声明的类和实例 main 方法,这个功能简化了Java入口类的写法,最简单的 Hello World 程序可以这样写。
结构化并发和 Scoped Values 都是 Loom 项目的一部分,就是那个引入了虚拟线程的 Loom 项目, 这两个功能在 Java 22 中没有变化。
最后的最后,是从 Java 16 以来的钉子户,矢量 API,在 Java 22 中已经来到了第7个孵化版本
以上就是 Java 22 的全部新功能了。
相关推荐
- ETCD 故障恢复(etc常见故障)
-
概述Kubernetes集群外部ETCD节点故障,导致kube-apiserver无法启动。...
- 在Ubuntu 16.04 LTS服务器上安装FreeRADIUS和Daloradius的方法
-
FreeRADIUS为AAARadiusLinux下开源解决方案,DaloRadius为图形化web管理工具。...
- 如何排查服务器被黑客入侵的迹象(黑客 抓取服务器数据)
-
---排查服务器是否被黑客入侵需要系统性地检查多个关键点,以下是一份详细的排查指南,包含具体命令、工具和应对策略:---###**一、快速初步检查**####1.**检查异常登录记录**...
- 使用 Fail Ban 日志分析 SSH 攻击行为
-
通过分析`fail2ban`日志可以识别和应对SSH暴力破解等攻击行为。以下是详细的操作流程和关键分析方法:---###**一、Fail2ban日志位置**Fail2ban的日志路径因系统配置...
- 《5 个实用技巧,提升你的服务器安全性,避免被黑客盯上!》
-
服务器的安全性至关重要,特别是在如今网络攻击频繁的情况下。如果你的服务器存在漏洞,黑客可能会利用这些漏洞进行攻击,甚至窃取数据。今天我们就来聊聊5个实用技巧,帮助你提升服务器的安全性,让你的系统更...
- 聊聊Spring AI Alibaba的YuQueDocumentReader
-
序本文主要研究一下SpringAIAlibaba的YuQueDocumentReaderYuQueDocumentReader...
- Mac Docker环境,利用Canal实现MySQL同步ES
-
Canal的使用使用docker环境安装mysql、canal、elasticsearch,基于binlog利用canal实现mysql的数据同步到elasticsearch中,并在springboo...
- RustDesk:开源远程控制工具的技术架构与全场景部署实战
-
一、开源远程控制领域的革新者1.1行业痛点与解决方案...
- 长安汽车一代CS75Plus2020款安装高德地图7.5
-
不用破解原车机,一代CS75Plus2020款,安装车机版高德地图7.5,有红绿灯读秒!废话不多讲,安装步骤如下:一、在拨号状态输入:在电话拨号界面,输入:*#518200#*(进入安卓设置界面,...
- Zookeeper使用详解之常见操作篇(zookeeper ui)
-
一、Zookeeper的数据结构对于ZooKeeper而言,其存储结构类似于文件系统,也是一个树形目录服务,并通过Key-Value键值对的形式进行数据存储。其中,Key由斜线间隔的路径元素构成。对...
- zk源码—4.会话的实现原理一(会话层的基本功能是什么)
-
大纲1.创建会话...
- Zookeeper 可观测性最佳实践(zookeeper能够确保)
-
Zookeeper介绍ZooKeeper是一个开源的分布式协调服务,用于管理和协调分布式系统中的节点。它提供了一种高效、可靠的方式来解决分布式系统中的常见问题,如数据同步、配置管理、命名服务和集群...
- 服务器密码错误被锁定怎么解决(服务器密码错几次锁)
-
#服务器密码错误被锁定解决方案当服务器因多次密码错误导致账户被锁定时,可以按照以下步骤进行排查和解决:##一、确认锁定状态###1.检查账户锁定状态(Linux)```bash#查看账户锁定...
- zk基础—4.zk实现分布式功能(分布式zk的使用)
-
大纲1.zk实现数据发布订阅...
- 《死神魂魄觉醒》卡死问题终极解决方案:从原理到实战的深度解析
-
在《死神魂魄觉醒》的斩魄刀交锋中,游戏卡死犹如突现的虚圈屏障,阻断玩家与尸魂界的连接。本文将从技术架构、解决方案、预防策略三个维度,深度剖析卡死问题的成因与应对之策,助力玩家突破次元壁障,畅享灵魂共鸣...
你 发表评论:
欢迎- 一周热门
-
-
前端面试:iframe 的优缺点? iframe有那些缺点
-
带斜线的表头制作好了,如何填充内容?这几种方法你更喜欢哪个?
-
漫学笔记之PHP.ini常用的配置信息
-
推荐7个模板代码和其他游戏源码下载的网址
-
其实模版网站在开发工作中很重要,推荐几个参考站给大家
-
[干货] JAVA - JVM - 2 内存两分 [干货]+java+-+jvm+-+2+内存两分吗
-
正在学习使用python搭建自动化测试框架?这个系统包你可能会用到
-
织梦(Dedecms)建站教程 织梦建站详细步骤
-
【开源分享】2024PHP在线客服系统源码(搭建教程+终身使用)
-
2024PHP在线客服系统源码+完全开源 带详细搭建教程
-
- 最近发表
-
- ETCD 故障恢复(etc常见故障)
- 在Ubuntu 16.04 LTS服务器上安装FreeRADIUS和Daloradius的方法
- 如何排查服务器被黑客入侵的迹象(黑客 抓取服务器数据)
- 使用 Fail Ban 日志分析 SSH 攻击行为
- 《5 个实用技巧,提升你的服务器安全性,避免被黑客盯上!》
- 聊聊Spring AI Alibaba的YuQueDocumentReader
- Mac Docker环境,利用Canal实现MySQL同步ES
- RustDesk:开源远程控制工具的技术架构与全场景部署实战
- 长安汽车一代CS75Plus2020款安装高德地图7.5
- Zookeeper使用详解之常见操作篇(zookeeper ui)
- 标签列表
-
- mybatis plus (70)
- scheduledtask (71)
- css滚动条 (60)
- java学生成绩管理系统 (59)
- 结构体数组 (69)
- databasemetadata (64)
- javastatic (68)
- jsp实用教程 (53)
- fontawesome (57)
- widget开发 (57)
- vb net教程 (62)
- hibernate 教程 (63)
- case语句 (57)
- svn连接 (74)
- directoryindex (69)
- session timeout (58)
- textbox换行 (67)
- extension_dir (64)
- linearlayout (58)
- vba高级教程 (75)
- iframe用法 (58)
- sqlparameter (59)
- trim函数 (59)
- flex布局 (63)
- contextloaderlistener (56)