JEP 445: 未命名类和实例主方法(预览)的进展
JEP 445,即《未命名类和实例主方法(预览)》,已从“提议目标”状态提升为“目标”状态。该JEP旨在通过简化Java语言的入门门槛,使学生能够在不理解大型程序所需语言特性的情况下编写他们的第一个程序。这是Java 21中的一个预览语言特性。
背景与目标
该JEP由Oracle公司的著名工程师兼Java语言架构师Brian Goetz领导,旨在使Java对初学者更加友好。尽管Java因其简单性而被广泛教授,但新入门的程序员往往对声明类和理解public static void main方法感到困惑。为此,JEP 445提出了三项主要改进:
- 引入更宽松的启动协议。
- 引入未命名类。
- 为关键方法和字段提供预定义的静态导入。
主要改进
简化“Hello, World!”程序
传统的“Hello, World!”程序可以简化为:class HelloWorld { void main() { System.out.println("Hello, World!"); } }进一步简化,无需显式声明类:
void main() { System.out.println("Hello, World!"); }- 未命名类
未命名类始终属于未命名包,适用于独立程序或程序入口点。Java编译器会将未包含在类声明中的方法、字段和类视为未命名顶级类的成员。未命名类是final的,不能实现接口或继承除Object之外的类,也无法通过名称引用,但必须包含可启动的main方法。 - 灵活启动协议
Java语言规范(JLS)更新了启动协议,允许main方法具有public、protected或默认访问权限,并支持无参数的静态main方法。如果类没有静态main方法但包含非私有零参数构造函数和实例main方法,则可以构造类的实例并调用实例main方法。
使用预览功能
在JDK 21中使用JEP 445的预览功能时,需通过以下命令显式启用:
javac --release 21 --enable-preview Main.java
java --enable-preview Main开发者还可以使用源代码启动器运行程序。
示例代码
开发者可以编写以下代码,无需显式声明类:
String greeting() { return "Hello, World!"; }
void main() {
System.out.println(greeting());
}或使用字段:
String greeting = "Hello, World!";
void main() {
System.out.println(greeting);
}获取与测试
开发者可以从OpenJDK JDK 21 Early-Access Builds下载OpenJDK,或使用SDKMan管理不同版本的Java。需要注意的是,这些早期访问版本可能不如最终版本稳定,主要用于测试和反馈。
总结
JEP 445通过简化类声明和main方法,使Java更易于初学者上手,同时保持了语言的灵活性和强大功能。该特性预计将在2023年9月的Java 21正式发布中提供。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。