重要:Java25正式发布(长期支持版)!
从 Oracle 官网可以看出,最新发布的 Java 25 为长期支持版,并会维护到 2033 年 9 月:

https://www.oracle.com/cn/java/technologies/java-se-support-roadmap.html
那问题来了,Java 25 都有哪些新特性呢?是否值得升级呢?接下来,我们一起来看。
视频讲解
https://www.douyin.com/video/7550608463605288255
1.语言特性增强
1.1 简化main方法
简化 Java 程序入口,支持无类声明的 void main() 方法,无需 public static 修饰符。
新版写法
// 无需显式类声明
void main() {
IO.println("Hello, JDK 25!"); // java.lang.IO 自动导入
String name = IO.readLine("Enter your name: ");
IO.println("Hello, " + name);
}
老版写法
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println("Hello, JDK 8!");
Scanner scanner = new Scanner(System.in);
System.out.print("Enter your name: ");
String name = scanner.nextLine();
System.out.println("Hello, " + name);
}
}
新版优点
大幅降低 Java 学习门槛,适合脚本编写和快速原型开发,让初学者能更轻松地编写第一个程序。
1.2 灵活的构造函数体
允许在 super() 或 this() 调用前执行初始化逻辑(如参数校验)。
新版写法
class User {
private final int age;
User(int age) {
// 初始化前置
if (age < 18 || age > 67)
throw new IllegalArgumentException("Age must be between 18 and 67");
super(); // super() 调用可不再强制首行
}
}
老版写法
class User {
private final int age;
User(int age) {
super(); // 必须为第一行
// 前置初始化逻辑需移到 super() 之后
if (age < 18 || age > 67) {
throw new IllegalArgumentException("Age must be between 18 and 67");
}
this.age = age; // 显式赋值
}
}
新版优点
提升代码可读性和灵活性,避免将校验逻辑提取到静态方法的模板代码,增强对象构建时的安全性。
1.3 模块一次性导入(预览特性)
允许通过 import module 一次性导入模块的所有公共类。
新版写法
import module java.util; // 导入 java.util 模块的所有公共类
// 可直接使用 List、ArrayList 等,无需单独导入
void main() {
List<String> list = new ArrayList<>();
}
老版写法
import java.util.List; // 显式导入单个类
import java.util.ArrayList; // 显式导入另一个类
public class Main {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
System.out.println(list);
}
}
新版优点
减少冗余的导入语句,提升模块化代码的可读性和编写效率,尤其在依赖多模块时非常有用。
1.4 原始类型模式匹配(预览特性)
在 switch 和 instanceof 中直接匹配原始类型,如 int、boolean 等。
新版写法
static void test(Object obj) {
if (obj instanceof int i) { // 直接匹配 int 类型
System.out.println("It's an int: " + i);
}
}
老版写法
static void test(Object obj) {
if (obj instanceof Integer) { // 检查是否为 Integer 包装类型
int i = (int) obj; // 显式拆箱
System.out.println("It's an int: " + i);
}
}
早期版本 instanceof 仅支持引用类型(如 Integer、String),需依赖装箱/拆箱(Integer → int)。
新版优点
统一原始类型与引用类型的模式匹配,简化类型判断逻辑,减少样板代码。
2.并发编程增强
2.1 作用域值(Scoped Values)
允许在线程内和跨线程共享不可变数据,旨在替代 ThreadLocal,优化虚拟线程不可变信息的传递。
新版写法
import java.lang.ScopedValue;
public class ScopedValueExample {
private static final ScopedValue<String> USER_ID = ScopedValue.newInstance();
public static void main(String[] args) throws Exception {
ScopedValue.where(USER_ID, "user123").run(() -> {
System.out.println("Current user: " + USER_ID.get());
});
}
}
新版优点
不可变性保证线程安全,内存占用比 ThreadLocal 低约 40%,生命周期自动绑定,无内存泄漏风险,尤其适合虚拟线程场景。
2.2 结构化并发(预览特性)
将运行在不同线程中的相关任务视为单个工作单元来管理,简化错误处理和取消操作。
新版写法
try (var scope = StructuredTaskScope.<String>open()) {
Subtask<String> userTask = scope.fork(() -> fetchUser());
Subtask<String> orderTask = scope.fork(() -> fetchOrder());
scope.join(); // 等待所有子任务完成或任一失败
if (userTask.state() == Subtask.State.SUCCESS) {
return new Response(userTask.get(), orderTask.get());
} else {
throw new RuntimeException("Subtask failed", userTask.exception());
}
}
新版优点
提高并发代码的可靠性和可观察性,尤其利于错误传播和任务取消。
3.性能优化
3.1 紧凑对象头
- 说明:将对象头从 128 位压缩至 64 位,减少小对象的内存占用。
- 启用:添加 JVM 参数 -XX:+UseCompactObjectHeaders。
新版优点
显著减少内存占用(小型对象最多可节省 33%),提升执行效率(CPU 时间减少,GC 频率降低)。测试显示堆占用减少 22%,CPU 时间减少 8%,GC 次数减少 15%。无需修改代码即可受益,对微服务、云环境等内存受限场景尤其有利。
3.2 Shenandoah 分代垃圾回收器
- 说明:Shenandoah GC 的分代模式正式成为生产就绪特性。
- 启用:-XX:+UseShenandoahGC -XX:ShenandoahGCMode=generational。
新版优点
针对新生代和老年代采用差异化回收策略,停顿时间降低高达 40%,适合高吞吐应用。
4.安全增强
引入一些列加密工具类,实现信息加密,例如引入基于晶格密码的 ML-KEM(密钥封装)和 ML-DSA(数字签名)算法,实现代码如下:
KeyPairGenerator kpg = KeyPairGenerator.getInstance("ML-DSA");
KeyPair kp = kpg.generateKeyPair();
Signature sig = Signature.getInstance("ML-DSA");
sig.initSign(kp.getPrivate());
sig.update(message);
byte[] signature = sig.sign();
// 验证签名
sig.initVerify(kp.getPublic());
sig.update(message);
boolean verified = sig.verify(signature);
小结
JDK 25 作为最新的 LTS 版本,通过一系列新特性在开发效率(实例主方法、模块导入声明)、代码质量与可维护性(灵活构造函数体、结构化并发)、性能(紧凑对象头、Shenandoah 分代 GC)和安全性(抗量子加密、PEM API)等方面带来了显著提升。
升级建议:
- 对于新项目,可以考虑直接采用 JDK 25 LTS。
- 对于现有项目,升级前务必进行充分测试。
注意:Java25 移除对 32 位 x86 平台的支持,确保运行环境为 64 位。
希望这些信息能帮助你更好地理解和利用 JDK 25 的新特性!
本文已收录到我的面试小站 www.javacn.site,其中包含的内容有:场景题、SpringAI、SpringAIAlibaba、并发编程、MySQL、Redis、Spring、Spring MVC、Spring Boot、Spring Cloud、MyBatis、JVM、设计模式、消息队列、Dify、Coze、AI常见面试题等。
重要:Java25正式发布(长期支持版)!的更多相关文章
- Docker-01 无人值守升级 CentOS 6.x 系统内核到 3.10.x 长期支持版
#!/bin/bash # # 无人值守升级 CentOS .x 系统内核到 3.10.x 长期支持版 # # # .检查操作系统是否为 CentOS .x # cat /etc/centos-rel ...
- ubuntu 非长期支持版升级系统版本号(ssh登录情况适用)
(1)当前系统为非长期支持版.而且已被废弃,仅仅能逐版本号升级 以当前系统版本号为11.10为例 改动source.list更新源为通用old源,由于原来的源已经不可用 deb http://old- ...
- ubuntukylin16.04LTS(乌班图麒麟版长期支持版,并非银河麒麟)安装体验
最近,国产银河麒麟版在政府部门推广使用.我有幸接触了,感觉还是不错的.这次政府软件正版化整改中,也列入了windows和银河麒麟的选项.我想试安装一下,可是没找到.就近找了它的类似系统ubuntuky ...
- centos7.6环境zabbix3.2源码编译安装版升级到zabbix4.0长期支持版
zabbix3.2源码编译安装版升级到zabbix4.0长期支持版 项目需求: .2版本不再支持,想升级成4.0的长期支持版 环境介绍: zabbix服务端是编译安装的,数据库和web在一台机器上 整 ...
- [转贴]Linux内核LTS长期支持版生命周期
Linux内核LTS长期支持版生命周期 https://blog.51cto.com/dangzhiqiang/1894026 搞不懂长期支持版本的特点和区别. 党志强关注0人评论4371人阅读201 ...
- Win10 LTSC 2019 长期支持版
win 10 LTSB 2016 文件名:cn_windows_10_enterprise_2016_ltsb_x86_dvd_9057089.iso (2.62GB) 语言: Chinese – S ...
- centos7.6下编译安装zabbix4.0.10长期支持版
一.安装数据库,这里使用的是percona-server5..24版本 配置如下 [root@zabbix4_clone:~]# cat /etc/my.cnf # Example MySQL con ...
- Java 11 正式发布,支持期限至2026年9月
美国当地时间9月25日,Oracle 官方宣布 Java 11 (18.9 LTS) 正式发布,可在生产环境中使用!这是自 Java 8 后的首个长期支持版本,非常值得大家的关注,可以通过下面的地址进 ...
- Java 8后的首个长期支持版本Java 11
Java 11是Java8后的首个长期支持版本.按照 Oracle 公布的支持路线图,Java 11 将会获得 Oracle 提供的长期支持服务,直至2026年9月. 按照官方的说法,新的发布周期会严 ...
- 重磅发布:阿里 OpenJDK终于开源啦! 将长期支持版本 Dragonwell
前几天的北京阿里云峰会,阿里巴巴正式宣布对外开源 OpenJDK 长期支持版本 Alibaba Dragonwell.作为 Java 全球管理组织 Java Community Process (JC ...
随机推荐
- 关于shell脚本的正确入门姿态
.这两天工作无事,捣鼓齐了linux系统,对于简单的操作那个ok的,但从未接触过shell脚本,这篇文章便是记录一个如何入门shell,又在简历上又多了一项技能啦 ~ 1.什么是shell? ...
- 如何彻底关闭Antimalware Service Executable
如何彻底关闭Antimalware Service Executable? - Microsoft Community ------------------------------------< ...
- Java--连接池和分页
连接池 分析: 涉及频繁的连接的打开.关闭,影响程序的运行效率! 连接管理: 预先创建一组连接,有的时候每次取出一个: 用完后,放回: 学习连接池: a. 自定义一个连接池 b. 学习优秀的连接池组件 ...
- SpringBoot3 + LangChain4j + Redis 实现大模型多轮对话及工具调用
引言 在人工智能快速发展的当下,大语言模型(LLM)已成为构建智能应用的核心技术之一.LangChain4j 作为 Java 生态中领先的 LLM 应用开发框架,为开发者提供了强大的工具,助力构建基于 ...
- CentOS7安装Wordpress
首先安装LAMP环境,包括了Apache, MySQL和PHP.这里面还有可道云作为可选项目. LAMP在Git上的页面 CentOS7上的安装命令,现在暂时不支持CentOS8. yum -y in ...
- 面试官:谈谈你AI项目的具体实现?
在如今比较卷的 Java 面试市场,会 AI 技术是比较吃香的,它也可以作为一个技术或项目亮点,帮你拿到更多的面试机会,当然,也会帮你大大的提升面试的通过率. 但是在面试的过程中,如何展现你的 AI ...
- CF862E Mahmoud and Ehab and the function
首先 \(f(j)=\displaystyle|\sum_{i=1}^{n}(-1)^{i-1}a_i+(-1)^ib_{i+j}|=|\sum_{i=1}^{n}(-1)^{i-1}a_i+\sum ...
- 【笔记】记录NHibernate在.net中的使用
最近在做一个AngularJs的管理平台,后台使用的是.Net Framework 4.5,搭配了NHibernate + Redis + Elasticsearch + Mysql等技术: 在新增接 ...
- RestCloud微服务框架,微服务PaaS平台
RestCloud微服务框架,企业级微服务PaaS开发框架,提供面向业务系统集成的微服务PaaS开发平台.一.PaaS平台介绍1.基于微服务微服务框架RestCloud PaaS平台是面向企业级的微服 ...
- 企业IT部门在集成类项目中扮演的角色
随着企业信息化建设的不断深入,集成类项目成为企业发展的重要支撑.这类项目涉及场景多.系统杂.实施牵扯广.周期长,对技术和管理的要求极高.企业IT部门(信息化部门)作为企业的技术核心和纽带,对业务需求. ...