0

0

Java 功能:深入了解最新的增强功能

霞舞

霞舞

发布时间:2024-12-06 20:27:01

|

794人浏览过

|

来源于dev.to

转载

java 功能:深入了解最新的增强功能

oracle 发布了另一个版本的 java,在字节码操作、工具开发、代码质量等方面进行了强大的增强。以下是最有趣和最有用的 java 23 功能 - 来自在该技术领域拥有 10 多年经验的 java 团队负责人的视角。

随着 java 的不断发展,每个新版本都旨在引入可提高语言性能、可用​​性和灵活性的功能。通过采用此版本,您可以保持领先地位,并为这些功能在未来的 lts 版本中变得稳定做好准备。

在本文中,我将向您快速概述 java 23 中的重大变化,重点关注最值得注意的 jep(jdk 增强提案)。对之前的变化感兴趣的人可以查看我之前关于 java 21 功能的文章,您还可以阅读 dariusz wawer 的旧文章,其中详细描述了 java 17 功能(以及与 java 8 的比较)。

对于代码示例,您必须将 --enable-preview 标志添加到编译器参数中。

立即学习Java免费学习笔记(深入)”;

模式、instanceof 和 switch 中的基本类型(预览)

基本类型一直是 java 不可或缺的一部分,但是以模式、instanceofswitch 构造来处理它们是有限的。 jep 455 旨在扩展模式匹配和 switch 语句以支持原始类型。

 

static string processinput(object obj) {    
   return switch (obj) {        
      case integer i -> "integer value: %s".formatted(i);        
      case double d -> "double value: %s".formatted(d);        
      default -> "unknown type";    
   }; 
} 

public static void main(string[] args) {
   system.out.println(processinput(10));    // integer value: 10
   system.out.println(processinput(5.5));   // double value: 5.5 }

此增强功能使开发人员能够编写更清晰、更简洁的代码。

类文件 api(第二预览版)

java 的类文件格式对于字节码操作和工具开发至关重要。 jep 466 引入了新的类文件 api 的第二个预览版,简化了对 java 类文件的访问和操作,而无需开发人员依赖 asm 或 bcel 等第三方库。

良精商城网店购物系统
良精商城网店购物系统

良精商城网店购物系统是一套能够适合不同类型商品、超强灵活的多功能在线商店系统,三级分销 PC+移动端+微网站,为您提供了一个完整的在线开店解决方案。良精网店购物系统除了拥有一般网上商店系统所具有的所有功能,还拥有着其它网店系统没有的许多超强功能。多种独创的技术使得系统能满足各行业广大用户的各种各样的需求,是一个经过完善设计并适用于各种服务器环境的高效、全新、快速和优秀的网上购物软件解决方案。

下载

这个 api 将使那些使用需要检查或修改类文件的框架、编译器或工具的人受益匪浅。凭借其简单的设计,它增强了灵活性,同时让开发人员更接近 java 的本机机制。您可以在下面找到与新 api 交互的简单示例:

public static void main(string[] args) throws ioexception {
   classfile classfile = classfile.of();
   classmodel model=classfile.parse(paths.get("/home/exampleclass.class"));
   system.out.println("class name: " + model.thisclass());
   // class name: 7 java23/exampleclass
   model.methods().foreach(
method -> system.out.println(" - " + method.methodname()));
   //- 
   //- sayhello
}

流收集者(第二次预览)

另一个预览功能为 java stream api 带来了非常好的增强。正如 jep473 文档所述,主要目标是使流管道更加灵活和更具表现力,并允许自定义中间操作来操纵无限大小的流。以下是内置收集操作的一些示例:

stream.of("a", "b", "c", "d", "e")
       .gather(gatherers.fold(() -> "", (a, b) -> a + b))
       .foreach(system.out::println);
//abcde
stream.of("a", "b", "c", "d")
       .gather(gatherers.windowfixed(2))
       .foreach(system.out::println);
//[a, b]
//[c, d]

当然,您可以创建收集器。为此,您只需实现 java.util.stream.gatherer 接口。 

范围值(第三次预览)

jep 481 引入了作用域值,这是线程局部变量的替代方案。它们提供了一种在特定范围内共享值的机制,使得使用多线程应用程序变得更容易。让我们深入研究代码示例:

public class jep481scopedvalues {
   private static scopedvalue x = scopedvalue.newinstance();


   public static void main(string[] args) {
       foo();
   }


   static void foo() {
       scopedvalue.runwhere(x, "foo", () -> bar());
   }


   static void bar() {
       system.out.println("printing x from bar(): " + x.get());
       scopedvalue.runwhere(x, "bar", () -> baz());
       system.out.println("printing x from bar(): " + x.get());
   }


   static void baz() {
       system.out.println("printing x from baz(): " + x.get());
   }
}


output:


printing x from bar(): foo
printing x from baz(): bar
printing x from bar(): foo

灵活的构造函数主体(第二预览版)

jep 482 重新审视了 java 中构造函数的灵活性。传统上,java 中的构造函数体在如何构建以及如何处理异常方面受到限制。此 jep 引入了更多灵活性,允许开发人员在构造函数中编写更复杂的初始化逻辑,从而增强对对象创建的控制。

public class Java481FlexibleConstructors extends BigInteger {
   Java481FlexibleConstructors(long value) throws Exception {
       if (value < 0) throw new Exception("Invalid value");
//that wasn’t possible before
       System.out.println("Initialized with value: " + value);
       super(String.valueOf(value));
   }
}

java 23 中的其他值得注意的功能

除了我已经介绍过的 jep 之外,java 23 还引入了其他几个值得一提的增强功能:

  • 性能改进(jep 474:默认情况下的 zgc 分代模式):java 23 通过默认启用其分代模式来优化 z 垃圾收集器。此功能通过隔离堆中的年轻对象和旧对象来提高垃圾收集性能,从而提高内存管理效率,特别是对于具有长时间运行进程的应用程序
  • 安全更新(jep 471:弃用 sun.misc.unsafe 中的内存访问方法以进行删除):此更新弃用了
  • sun.misc.unsafe 中广泛使用的某些内存访问方法直接内存操作,增强平台的安全性。
  • 库增强(jep 467:markdown 文档注释):jep 467 在 javadoc 注释中引入了对 markdown 的支持。此功能允许开发人员在代码注释中使用 markdown 语法编写格式更好、更具可读性的文档,从而改进内部和外部文档实践​
  • 模块系统改进(jep 476:模块导入声明):jep 476 添加了在 java 源文件中使用导入模块声明的功能。这简化了模块管理,特别是在多模块项目中,因为允许开发人员导入整个模块,而不仅仅是单个类或包。
概括

java 不断发展,版本 23 带来了大量改进,从模式匹配中更好地处理原始类型到更灵活的构造函数和高级流处理,这些改进将增强开发人员的体验。请务必探索这些更改并开始将它们合并到您的开发工作流程中 - 因为它们可能很快就会从预览功能转变为核心功能。 

如果您对更多 java 相关内容(包括深入研究版本 21 和 17)感兴趣,请查看我们博客上的一些其他出版物:

    java 21 功能:详细了解新 lts 版本中最重要的变化
  1. java 17 功能:版本 8 和 17 之间的比较。这些年来发生了哪些变化?
  2. jvm kubernetes:为 java 开发人员优化 kubernetes
  3. github copilot 教程:我们已经使用 java 对其进行了测试,您也可以按照以下方法进行操作
  4. 如何写好代码?凭借良好的实践、优秀的团队和 java 代码质量工具

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
switch语句用法
switch语句用法

switch语句用法:1、Switch语句只能用于整数类型,枚举类型和String类型,不能用于浮点数类型和布尔类型;2、每个case语句后面必须跟着一个break语句,以防止执行其他case的代码块,没有break语句,将会继续执行下一个case的代码块;3、可以在一个case语句中匹配多个值,使用逗号分隔;4、Switch语句中的default代码块是可选的等等。

538

2023.09.21

Java switch的用法
Java switch的用法

Java中的switch语句用于根据不同的条件执行不同的代码块。想了解更多switch的相关内容,可以阅读本专题下面的文章。

422

2024.03.13

硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

1100

2023.10.19

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

189

2025.10.17

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1483

2025.12.29

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

18

2026.01.19

堆和栈的区别
堆和栈的区别

堆和栈的区别:1、内存分配方式不同;2、大小不同;3、数据访问方式不同;4、数据的生命周期。本专题为大家提供堆和栈的区别的相关的文章、下载、课程内容,供大家免费下载体验。

395

2023.07.18

堆和栈区别
堆和栈区别

堆(Heap)和栈(Stack)是计算机中两种常见的内存分配机制。它们在内存管理的方式、分配方式以及使用场景上有很大的区别。本文将详细介绍堆和栈的特点、区别以及各自的使用场景。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

575

2023.08.10

Python 自然语言处理(NLP)基础与实战
Python 自然语言处理(NLP)基础与实战

本专题系统讲解 Python 在自然语言处理(NLP)领域的基础方法与实战应用,涵盖文本预处理(分词、去停用词)、词性标注、命名实体识别、关键词提取、情感分析,以及常用 NLP 库(NLTK、spaCy)的核心用法。通过真实文本案例,帮助学习者掌握 使用 Python 进行文本分析与语言数据处理的完整流程,适用于内容分析、舆情监测与智能文本应用场景。

22

2026.01.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SQL 教程
SQL 教程

共61课时 | 3.6万人学习

Java 教程
Java 教程

共578课时 | 52.1万人学习

oracle知识库
oracle知识库

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号