0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Java 25正式发布,重要特性详解(附代码示例):灵活构造函数体、模块导入声明、AOT方法分析等

龙智DevSecOps 2025-10-29 13:16 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

日前,Oracle宣布正式发布最新的长期支持(LTS)版本Java 25,这是备受欢迎的编程语言和开发平台的全新版本。Java 25 (Oracle JDK 25) 提供了数千项改进,不仅可显著提高开发人员的工作效率,还增强了平台的性能、稳定性和安全性,以帮助企业加快业务增长。

本文将深入解析Java 25包含的新特性及其对Java开发者的意义,以及最新的 Java LTS 版本如何影响整个Java生态系统。

Java 25是什么?

Java 25是JDK的最新长期支持(LTS)版本,于2025年9月正式发布。Java 25包含了18项提议的永久性、预览性、孵化性和实验性功能。

什么是 JEP?它为何重要?

JEP是“JDK增强提案”的简写。它是一种规范化的方法,用于为Java语言添加初步、预览或永久的新特性。

Java 25 中有四种不同类型的 JEP:

  1. 实验版JEP:主要是虚拟机(VM)层面特性的早期版本,可能不完整、不稳定或存在风险。使用时需通过特定的标志来启用。Java 25 中的JFR CPU时间分析(JEP 509)即属于此类JEP。
  2. 孵化版JEP:一种在工具和 API 尚未定稿时就能让开发者使用它们的方式,这些工具和 API 可能会在未来版本中最终定稿或被永久移除。孵化版JEP是当前测试新功能的有效方法,但若用于生产环境,需要自行承担风险。在Java 25中,Vector API(JEP 508,第10个孵化版本)是唯一的孵化版JEP。
  3. 预览版JEP:指设计、规范和实施已经完成但尚未永久化的特性,这意味着它们可能会在未来的版本中被更改或删除。预览版 JEP 也必须特别启用才能使用。Java 25 包括以下的预览特性:加密对象的PEM编码(JEP 470)、稳定值(JEP 502)、结构化并发(JEP 505,第5次预览)以及模式匹配、instanceof和switch中的原始类型(JEP 507,第3次预览)
  4. 永久版JEP:这并非Oracle的官方称谓,而是指那些在之前的JDK版本出现过,并已根据用户反馈进行改进的JEP。由于Java 25是LTS版本,因此包含大量的永久版JEP。

Java 25 的关键特性

Java 25增加了一系列新特性,旨在使语言更具表现力、更现代、更灵活且性能更强。

该版本引入了灵活构造函数体、紧凑源文件等实用特性,有助于减少冗余代码,使语法更加现代化。扩展的模式匹配和 AOT 方法分析则提升了代码的清晰度与运行效率。模块导入声明则让大型代码库的组织和维护变得更加简单。

这些变化表明,Java正在积极演进,以满足现代开发需求,而不仅仅是追逐潮流。这些改进将产生显著影响:开发者的生产力将有所提升,他们将减少编写重复模版代码的时间,专注于解决实际问题;同时,应用程序的性能也将更高、更易于维护。

总体而言,Java 25是一次重大进步,确保了Java语言在当今快速发展的技术环境中,依然保持相关性和竞争力。接下来,我们一起来看看其中值得关注的5个新特性。

灵活构造函数体(JEP 513)

Flexible Constructor Bodies(JEP 513)

该特性曾在Java 22、23和24中进行过预览,现已成为Java 25的永久特性。灵活的构造函数体允许你在调用 super( ) 或 this( ) 之前编写代码,并放宽了对final字段初始化时机和方式的限制。

这意味着你不再需要为了遵守严格的构造函数流程规则而重构代码,并显著提升代码的可读性和可维护性。这尤其适用于在超类构造前进行条件初始化或验证逻辑的场景。

publicclassCustomer { final UUID customerId; final String email; publicCustomer(String email){ // Validate email format before object creation if (!isValidEmail(email)) thrownew ValidationException("Invalid email format"); super(); //rest of code } }

模式匹配中的原始类型(JEP 507)

Primitive Types in Patterns (JEP 507)

在Java 25中,模式匹配现在支持所有原始类型(如int、long、double),而此前仅限于引用类型。这一改进统一了Java的模式匹配模型,使开发者能够在所有数据类型中更高效地使用instanceof和switch。

这一增强在不牺牲性能的前提下,让代码更加简洁,对于从事分析、金融或流数据处理等性能关键领域的开发者尤为有利。

示例:

switch (x) { caseint i -> System.out.println("Int value: " + i); casedouble d -> System.out.println("Double value: " + d); }

紧凑源文件与实例main方法(JEP 512)

Compact Source Files and Instance Main Methods(JEP 512)

Java 25 简化了源文件结构:允许顶层类声明不使用public修饰符,默认导入常用的java.base包,允许将main方法声明为实例方法,并使用简化的控制台I/O。

这些改动使得 Java 对初学者、脚本编写者和工具开发者更加友好。这一特性也有助于加快原型的构建,使得创建小型程序或测试驱动程序的难度更小,同时不牺牲Java的结构或可读性。

示例:

classHello { voidmain(){ System.out.println("Hello from an instance main!"); } }

模块导入声明(JEP 511)

Module Import Declarations (JEP 511)

在 Java 25 中,你现在可以使用 import module 来明确导入命名模块,使依赖关系直接可见,而不必隐藏在 module-info.java 中。在源文件中声明模块的使用情况,有助于简化维护、重构甚至静态分析过程。

这一变化对于插件架构、SDK以及基于JPMS(Java平台模块系统)构建的应用程序尤为有用。

示例:

importmodule com.company.order; //Single module import publicclassOrderController { // All exported types from order module available OrderService orderService; OrderValidator validator; // etc. }

提前(AOT)方法分析(JEP 515)

Ahead-of-Time (AOT) Method Profiling (JEP 515)

这一特性通过预先分析方法行为,并复用这些数据来优化JIT编译性能。可以根据预先记录的使用模式对方法进行优化,从而显著缩短预热时间。

对于短期的云应用、微服务或无服务器功能而言,这意味着更快的冷启动速度和更可预测的运行时性能。此外,它也为生产工作负载(其中启动时间直接影响 SLA 或成本)进行更一致的调优打开了大门。

Java 25包含哪些JEP?

Java 25 提议的完整JEP列表如下:

  • 470:PEM Encodings of Cryptographic Objects (Preview) – 加密对象的 PEM 编码(预览)
  • 502:Stable Values (Preview) – 稳定值(预览)
  • 503:Remove the 32-bit x86 Port – 移除32位x86端口
  • 505:Structured Concurrency (Fifth Preview) – 结构化并发(第5次预览)
  • 506:Scoped Values – 作用域值
  • 507:Primitive Types in Patterns, instanceof, and switch (Third Preview) – 模式匹配、instanceof和switch中的原始类型(第3次预览)
  • 508:Vector API (Tenth Incubator) – 向量 API(第10次孵化)
  • 509:JFR CPU-Time Profiling (Experimental) – JFR CPU时间分析(实验版)
  • 510:Key Derivation Function API – 密钥派生函数 API
  • 511:Module Import Declarations – 模块导入声明
  • 512:Compact Source Files and Instance Main Methods – 紧凑源文件与实例main方法
  • 513:Flexible Constructor Bodies – 灵活构造函数体
  • 514:Ahead-of-Time Command-Line Ergonomics – 提前编译命令行易用性改进
  • 515:Ahead-of-Time Method Profiling – 提前方法分析
  • 518:JFR Cooperative Sampling – JFR协作式采样
  • 519:Compact Object Headers – 紧凑对象头
  • 520:JFR Method Timing & Tracing – JFR方法计时与追踪
  • 521:Generational Shenandoah – 分代Shenandoah垃圾回收器

为何要升级到 Java 25?

Oracle表示将为Java 25提供长达至少8年的长期支持服务,这使得Java 25成为生产环境的稳定之选。它继承了以往版本的创新成果,同时引入了多项提升开发效率和应用性能的新能力。

无论你是经验丰富的 Java 开发者,还是刚刚入门的新手,Java 25 都能满足你的需求:初学者可以享受更简洁的语法,专业开发者则能利用更强大的高级 API。此次更新充分体现了 Java持续进化的生命力。

总结

Java 25 带来了众多新特性,极大地促进了更快速、更高效的 Java 开发。由于它是长期支持版本,整个Java社区的开发工具也将会迅速跟进,以提供对Java 25的支持。

Perforce JRebel一直是最快支持 Java LTS 版本的工具之一( JRebel的支持预计于10月发布)。使用JRebel,还能进一步节省时间——它能够消除耗时的重建和重新部署过程,让你的开发流程更加顺畅。

wKgZO2kBou6APe5dAAAMpIAjIdE407.png

关于Perforce JRebel

Perforce JRebel是一款Java开发效率工具,旨在帮助java开发者更快地编写更好的应用程序。JRebel可即时重新加载对代码的修改,无需重启或重新部署应用程序,就能让开发者即时看到代码更改的效果,从而缩短开发、调试和测试周期,大大提升开发效率。

JRebel支持多种IDE,包括IntelliJ IDEA、Eclipse、VS Code、NetBeans等,并支持广泛的Java应用服务器、框架和构建工具,能够轻松融入现有的开发环境。

wKgZPGkBowCAYvk8AAJr36VVS9o957.png

Perforce中国授权合作伙伴——龙智

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    20

    文章

    2997

    浏览量

    115756
  • JVM
    JVM
    +关注

    关注

    0

    文章

    161

    浏览量

    12967
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    MCU软件核心库及示例代码速览 !

    为加速嵌入式项目开发,本文对MCU软件核心库进行整体速览,涵盖初始化、外设控制与中断处理关键部分,并结合简洁示例代码,帮助开发者快速理解与应用库功能。 一、MCU核心库函数功能 MC
    的头像 发表于 12-11 17:19 443次阅读
    MCU软件核心库及<b class='flag-5'>示例</b><b class='flag-5'>代码</b>速览 !

    结构声明与定义

    一样,去声明我们的结构体操作,但是C语言中规定,声明结构变量的时候,struct关键字是不可少的。 struct 结构类型名 结构
    发表于 12-11 07:52

    共用声明

    还要考虑内存对齐的问题。 共用可以类似结构一样来定义和声明,但是共用还可以允许不带名字: union { int i; char ch; float f; } a,
    发表于 12-05 07:24

    发布元服务配置隐私声明

    服务”。 选择要发布的元服务。 左侧导航选择“应用上架 > 版本信息”下待发布的版本。 进入“隐私声明”区域,选择您生成的隐私政策和用户协议。 本文参考鸿蒙官方文档
    发表于 11-25 11:24

    Arm Neoverse CPU上大代码Java应用的性能测试

    Java 是互联网领域广泛使用的编程语言。Java 应用的一些特性使其性能表现与提前编译的原生应用(例如 C 程序)大相径庭。由于 Java 字节码无法直接在 CPU 上执行,因此通常
    的头像 发表于 11-05 11:25 411次阅读
    Arm Neoverse CPU上大<b class='flag-5'>代码</b>量<b class='flag-5'>Java</b>应用的性能测试

    Simcenter FLOEFD EDA Bridge模块:使用导入的详细PCB设计和IC热特性来简化热分析

    的EDABridge模块可将印刷电路板(PCB)详细导入到您选择的机械计算机辅助设计(MCAD)工具中,为热分析做准备。一直以来,访问PCB数据的有效方法是使用中间数
    的头像 发表于 06-10 17:36 1422次阅读
    Simcenter FLOEFD EDA Bridge<b class='flag-5'>模块</b>:使用<b class='flag-5'>导入</b>的详细PCB设计和IC热<b class='flag-5'>特性</b>来简化热<b class='flag-5'>分析</b>

    轮毂电机电磁噪声测试方法特性分析

    扭矩的增加对轮毂电机的振动状态影响不大,对噪声的影也不明显。 纯分享帖,需要者可点击附件免费获取完整资料~~~*附件:轮毂电机电磁噪声测试方法特性分析.pdf【免责声明】本文系网络
    发表于 06-10 13:19

    基于STM32的卫星GPS路径记录仪(完整源代码

    基于STM32的卫星GPS路径记录仪(完整源代码) 项目实例下载! 纯分享帖,需要者可点击附件免费获取完整资料~~~【免责声明】本文系网络转载,版权归原作者所有。本文所用视频、图片、文字如涉及作品版权问题,请第一时间告知,删
    发表于 05-23 20:48

    HarmonyOS5云服务技术分享--云函数创建配置指南

    。HarmonyOS的AGC平台提供灵活配置,支持Node.js、Python、Java多种语言,还能自定义运行环境哦! ?️ 二、手把手创建第一个云函数 ​​Step 1:进入云
    发表于 05-22 17:08

    函数指针的六个常见应用场景

    函数指针在嵌入式开发中有着广泛的应用,它让代码更加灵活,减少冗余,提高可扩展性。很多时候,我们需要根据不同的情况动态调用不同的函数,而函数
    的头像 发表于 04-07 11:58 1153次阅读
    <b class='flag-5'>函数</b>指针的六个常见应用场景

    手把手教你把coze扣子智能接入CSK6大模型开发板实现听新闻自由

    、创建应用 2、导入工程2. 导入工程示例:选择扣子智能示例.json文件导入 ● HO
    发表于 04-03 14:57

    如何将调用方函数的MATLAB代码导入到DS?

    我最近制作了一个包含调用方函数的模型(我已将模型附加到 zip 文件中)。代码构建正常。但是当我在 design studio 中导入代码时,它会引发错误,因为它无法编译或
    发表于 04-02 06:51

    TDengine 发布时序数据分析 AI 智能 TDgpt,核心代码开源

    2025 年 3 月 26 日,涛思数据通过线上直播形式正式发布了其新一代时序数据分析 AI 智能——TDgpt,并同步开源其核心代码。这一创新功能作为 TDengine 3.3.6
    的头像 发表于 03-27 10:30 572次阅读
    TDengine <b class='flag-5'>发布</b>时序数据<b class='flag-5'>分析</b> AI 智能<b class='flag-5'>体</b> TDgpt,核心<b class='flag-5'>代码</b>开源

    解锁TSMaster fifo函数:报文读取的高效方法

    入门》手册。1.技术背景TSMaster的小程序模块中提供了接收事件、发送事件以及预发送事件回调事件,如图1。相比于回调函数,fifo函数使用起来比较
    的头像 发表于 03-14 20:04 965次阅读
    解锁TSMaster fifo<b class='flag-5'>函数</b>:报文读取的高效<b class='flag-5'>方法</b>

    函数信号分析仪的原理和应用场景

    的能量分布,从而可以揭示信号的频率成分和特性。 时域分析:除了频谱分析外,函数信号分析仪还可以进行时域
    发表于 01-20 14:13