Java 23 于 2024年9月17日 正式发布,带来了一系列新功能和改进,旨在提高开发者的生产力和性能,同时增强面向所有程序员的易用性。
此次发布的亮点包括:
- 在模式匹配、instanceof 和 switch 中使用原始类型(JEP 455,预览版):此功能扩展了模式匹配,使其能够与原始类型一起使用。它允许在 instanceof 和 switch 语句中使用原始类型,提高了表达能力,并使处理原始类型时无需转换为包装类型变得更加容易。
- 类文件 API(JEP 466,第二次预览版):引入了一个标准的 API,用于解析、生成和转换 Java 类文件。这简化了与类文件的交互过程,并提供了一种结构化的方式来操作它们,取代了使用诸如 ASM 这样的第三方库的需要。
- Markdown 文档注释(JEP 467):Java 23 允许开发人员使用 Markdown 编写 JavaDoc 注释。这一改进使 API 文档更易于阅读和编写,并支持标题、列表和代码块等格式选项。
- 向量 API(JEP 469,第八次孵化):此 API 使创建向量计算成为可能,这些计算可以可靠地编译为针对不同 CPU 架构的向量指令。这增强了性能,特别是在需要高效数据处理的应用程序中。
- 流聚合器(JEP 473,第二次预览版):此 Stream API 的新增功能引入了自定义中间操作,用于流管道。它允许开发人员定义灵活的数据聚合方法,处理无限流等场景,并进一步提高流处理能力。
- 弃用 sun.misc.Unsafe 中的内存访问方法以进行移除(JEP 471):sun.misc.Unsafe 中的内存访问方法被弃用,以进行未来的移除。这鼓励开发人员转向 VarHandle API 或 Foreign Function & Memory API,以实现更安全和稳定的内存访问。
- ZGC:默认为代际模式(JEP 474):Z 垃圾收集器(ZGC)现在默认运行在代际模式下,此模式更频繁地收集年轻对象,提高了垃圾收集效率和整体应用程序性能,特别是在长时间运行的程序中。
- 模块导入声明(JEP 476,预览版):此功能允许开发人员通过单个声明导入模块中的所有包。它简化了模块化库的使用,并减少了导入语句的冗长性,使模块化编程更容易访问。
- 隐式声明的类和实例主方法(JEP 477,第三次预览版):针对初学者,此功能简化了小型程序的创建,允许隐式类声明和实例主方法。它减少了较小 Java 程序中的样板代码需求,使初学者更容易上手。
- 结构化并发(JEP 480,第三次预览版):结构化并发将运行在不同线程中的相关任务视为一个工作单元。这改进了错误处理、可观察性和任务管理,帮助开发人员避免诸如线程泄漏等问题,并使并发编程更容易管理。
- 范围值(JEP 481,第三次预览版):此功能提供了一种在给定范围内安全共享数据的机制。范围值提供了一种轻量级的替代线程局部变量的方法,提高了并发应用程序的性能。
- 灵活的构造函数体(JEP 482,第二次预览版):此功能允许在派生类构造函数中,在显式调用超类构造函数之前出现语句。它为开发人员提供了更多初始化字段和组织构造函数逻辑的灵活性,同时保持构造函数自顶向下的执行顺序。
来源:Java(https://openjdk.org/projects/jdk/23/)
这些更新措施继续推动Java的发展,使其更易于初学者使用,同时保持企业应用所需的高性能和高可扩展性。
示例: 1. JEP 455: 模式中的原始类型、instanceof 和 switch表达式中的原始类型 // 旧的原始模式匹配不支持的方式
out.println("旧模式下的模式匹配....");
Object o = 127;
switch (o) {
case Integer i -> out.println("整数: " + i);
case Long l -> out.println("长整型: " + l);
default -> out.println("其他: " + o);
}
// Java 17: 原始类型模式匹配支持
out.println("新模式...支持原始类型匹配");
Object o = 127;
switch (o) {
case int i -> {out.println("整数: "+ i);}
case long l -> {out.println("整数: "+ l);}
default -> {out.println("其他: "+ o);}
}
8. JEP 476:模块导入声明
// Java的新方式
import static java.lang.System.out;
import module java.base;
public class _3_ModuleImport {
public static void main(String[] args) throws Exception {
// 通过单个导入语句调用多个API。JEP 476
// import module java.base
out.println("java --enable-preview _3_ModuleImport.java");
out.println("值数组为 " + List.of("Hello ", "Module Import ", "World!"));
File file = new File("README.MD");
out.println("文件README.MD = " + file.canRead());
out.println("正在读取文件...");
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
while (br.ready()) {
out.println(br.readLine());
}
}
out.println("文件已关闭..");
}
}
9. JEP 477:隐式声明的类和实例以及实例主方法(main方法)
// 一种写Hello World的旧方法
public class _1_Main_Classic {
public static void main(String[] args) {
System.out.println("Hello world! 旧方法");
}
}
// Java 23: 新的 Hello World 示例
public static void main() {
System.out.println("Hello World! Java 23 版本");
}
敬请期待更多来自Java 23的示例,以及对之前版本的见解。请务必探索GitHub上的可用资源以获取更多详情。
GitHub 仓库 —Java 示例代码
其他 GitHub: 存储库- Gen AI 示例 Java 22 和 SpringBoot 与 LangChain:使用 Deep Learning 4 Java 和 LangChain4J 进行生成式 AI 的 Java 示例,包括使用 ChatGPT LLM、RAG 和其他开源 LLM 的示例,如 GPT 3.5 / 4o, Gemini, Claude 3, Llama3, Phi-3, Gemma, Falcon 2, Mistral, Wizard Math。情感分析、基于应用程序上下文的聊天机器人。自定义数据处理功能。LLMs — GPT 3.5 / 4o, Gemini, Claude 3, Llama3, Phi-3, Gemma, Falcon 2, Mistral, Wizard Math: GitHub 仓库
- 使用 SpringBoot 3.2.4 和 Java 22 以及 Jakarta EE 10 的微服务。微服务使用 Redis 作为分布式缓存,并使用 Kafka 客户端进行异步通信,同时包含 AOP、异常处理、加密和安全(JWT)框架。
- 使用 SpringBoot 3.1.0 和 Java 17 以及 Jakarta EE 10 的微服务。微服务使用 Redis 作为分布式缓存,并使用 Kafka 客户端进行异步通信,同时包含 AOP、异常处理、加密和安全(JWT)框架。GitHub 仓库
- 使用 SpringBoot 3.1.0 和 Spring WebFlux 与 R2DBC 的微服务。微服务使用 Redis 作为分布式缓存,并使用 Kafka 客户端进行异步通信,同时包含 AOP、异常处理、加密和安全(JWT)框架。GitHub 仓库
- 微服务测试自动化示例:为 SpringBootTest 2.7、JUnit 5、TestNG 7、Spock 3、RestAssured 5、Cucumber 6、Selenium 4、Mockito 3、WireMock 2、Pact 4。所有这些测试框架都用于完全自动化基于微服务的应用程序的测试过程。GitHub 仓库
[Netflix实际上如何使用Java技术](https://www.youtube.com/watch?v=BaUrpq_7KMk 视频链接)
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦