写点什么

JDK 25 将实例主方法从预览特性转为最终特性

  • 2025-05-25
    北京
  • 本文字数:1830 字

    阅读完需:约 6 分钟

大小:715.86K时长:04:04
JDK 25将实例主方法从预览特性转为最终特性

从 JDK 21 开始,经过了四轮的全面预览周期,JDK 25 终于集成了 JEP 512,紧凑源文件和实例主方法(Compact Source Files and Instance Main Methods)。这些功能以前被称为“隐式声明类和实例主方法(Implicitly Declared Classes and Instance Main Methods)”,现在该特性已在 JDK 25 中最终确定。这一演变引入了一些精炼的概念,如紧凑源文件、灵活的实例主方法、新的控制台 I/O 辅助类java.lang.IO,以及核心库的自动导入。它的主要目标是为初学者提供一个易于使用的 Java 语言入门途径,同时也使有经验的开发人员能够在制作脚本和原型时大大减少繁琐的过程。

 

该倡议与甲骨文公司 Java 语言架构师Brian Goetz在 2022 年 9 月的博客文章“Paving the On-Ramp”中阐述的愿景不谋而合。此外,甲骨文公司技术顾问Gavin Bierman最近发布了初步规范草案,供社区审查。

 

传统上,即使是最简单的 Java 程序也需要明确的类声明:

// 传统的"Hello, World!"public class HelloWorld {    public static void main(String[] args) {        System.out.println("Hello, World!");    }}
复制代码

 

JEP 512 通过引入隐式声明的类解决了这一复杂性。如果源文件 (.java) 包含显式类声明之外的方法或字段,Java 编译器会将这些内容视为属于一个未命名的、隐式声明的顶层类。这大大简化了初学者的程序:

 

// 使用JEP 512特性的"Hello, World!"void main() {    IO.println("Hello, World!");}
复制代码

作为对隐式声明类的补充,JEP 512 引入了对实例方法作为程序入口点的支持。对于较简单的情况,放宽了对静态入口点(public static void main(String[] args)))的历史要求。

 

Java 启动协议现在可以识别实例主方法。如果选择启动的类缺乏合适的静态主方法,启动器就会搜索实例主方法。首选的实例入口点签名非常简单:

void main() {    // 程序逻辑}
复制代码

对于涉及命令行参数的情况,它还支持另一种签名void main(String[] args)。采用这种方法,初学者无需立即处理static关键字或String[] args参数。使用实例主方法时,Java 启动器会在调用主方法之前自动实例化类。

 

为了解决另一个常见的复杂问题,也就是从System.in读取内容和通过System.out.println打印内容的问题,JEP 512 引入了一个工具类java.lang.IO。该类位于java.lang包中,无需显式的导入语句就可以隐式地使用。它为基本的控制台交互提供了基础的静态方法:

 

public static void print(Object obj);public static void println(Object obj);public static void println();public static String readln(String prompt);public static String readln();
复制代码

这有助于进行简单的交互式编程:

// 使用java.lang.IO的简单交互式程序void main() {    String name = IO.readln("Please enter your name: ");    IO.print("Pleased to meet you, ");    IO.println(name);}
复制代码

值得注意的是,虽然IO类本身不需要导入,但其静态方法不再像早期的预览版本那样会被隐式导入到紧凑源文件中。除非使用显式的静态导入,否则开发人员必须明确进行限定方法调用(比如,IO.println(...))。这一调整可确保在将紧凑源文件转化为常规类时实现更平稳的过渡,避免出现静态导入等突然出现的额外要求。

 

为进一步减少模板式代码,尤其是对不熟悉包结构的初学者而言,紧凑型源文件现在能够自动访问java.base模块导出的包中所有的公共顶层类和接口。这种隐式导入方式类似于配套 JEP 中提出的声明(import module java.base;),它提供了对常用类的无缝访问,如java.utiljava.iojava.math包中的常用类(比如,ListArrayListFileBigDecimal)。因此,无需显式导入即可直接使用这些类:

// 使用List的紧凑源文件,无需显式导入void main() {    var authors = List.of("Bazlur", "Shaaf", "Mike"); // List会被自动导入    for (var name : authors) {        IO.println(name);    }}
复制代码

JDK 25 中最终确定了紧凑源文件、实例主方法、java.lang.IO类以及java.base模块的自动导入,这标志着 Java 在改善学习曲线和简化小型程序开发方面的重大改进。通过降低初始的复杂性,这些增强功能有助于 Java 在不同场景的逐步引入,而不会影响向高级编程结构的平稳过渡。最重要的是,这些功能保持了兼容性,并无缝集成到了标准 Java 工具链中,巩固了它们作为核心组件而非孤立方言的地位。如果得到广泛采用,这些改进将对 Java 教育和开发人员制作简单实用程序和原型的方法产生深远影响。

 

原文链接:

Instance Main Methods Move from Preview to Final in JDK 25

2025-05-25 16:001

评论

发布
暂无评论

自助客户服务页面|从To B产品流量获取到客户服务体验上升

Baklib

深入nodejs的event-loop

coder2028

node.js

一比一手写迷你版vue,彻底搞懂vue运行机制

hellocoder2029

Docker安装minio(CentOS7)

蜗牛也是牛

Go语言—基本输入输出包的使用

良猿

Go golang 后端 11月月更

5 分钟教你搭建「视频动作分类」系统

Zilliz

人工智能 计算机视觉 Towhee 视频动作分类

Milvus 编译环境演进

Zilliz

c++ Python Milvus cmake 编译环境

极客时间运维进阶训练营第四周作业

好吃不贵

带你全面了解Gateway

好程序员IT教育

Spring Cloud Gateway SpringCloud Gateway

JAVA concurrency -- AQS 源码详解

骑牛上青山

Java 源码

数据挖掘、机器学习、深度学习的区别

九章云极DataCanvas

数据挖掘 机器学习 深度学习

java学习后该怎么培养自主学习能力

小谷哥

哪些前端学习方法对小白比较有用?

小谷哥

量化交易炒币机器人开发合约策略

薇電13242772558

量化策略

惊艳华为PocketS发布会! 杰美特旗下高端品牌决色推出首款“月光宝壳”

科技热闻

OpenI启智社区2022年度优秀项目及开发者申报通知

OpenI启智社区

开源社区 优秀项目 优秀开发者 OpenI启智社区

「推荐收藏」提高组件库Level必做好这六件事

GFE

前端 组件库

pytorch实现空洞卷积+残差网络实验(torch实现

Studying_swz

深度学习 11月月更

5 步!用阿里云 Serverless 搭建高质量的图片压缩工具

阿里巴巴云原生

阿里云 Serverless 云原生

深入理解Node.js的进程与子进程

coder2028

node.js

面向智慧城市的GIS框架

tjn

GIS 可视化 11月月更

系统运维利器,百万服务器运维实战总结!一文了解最新版SysAK|龙蜥技术

OpenAnolis小助手

Linux 开源 运维 龙蜥社区 SysAK

web前端培训学习需要注意什么

小谷哥

专为实时而生 — GreptimeDB 现已在 GitHub 正式开源

Greptime 格睿科技

开源 分布式 云原生 时序数据库 存算分离

web前端培训上海学习好吗

小谷哥

大数据培训学习后,就业不好就业

小谷哥

鼎医信息加入PolarDB开源数据库社区

阿里云数据库开源

阿里云 polarDB PolarDB-X 阿里云数据库 PolarDB for PostgreSQL

豆瓣评分9.8!阿里内部的分布式架构手册让多少人突破了瓶颈?

程序知音

Java 分布式 java架构 java架构师 后端技术

深入剖析nodejs中间件

coder2028

node.js

直播预告|全闪文件存储在 AI 大数据领域的前沿应用

焱融科技

云计算 分布式系统 高性能 文件存储 全闪存储

微博评论高可用高性能计算架构设计

Jack

架构实战训练营9期

JDK 25将实例主方法从预览特性转为最终特性_编程语言_A N M Bazlur Rahman_InfoQ精选文章