Java 21 引入了两个语言核心功能:
- 未命名的 Java 类
- 新的启动协议:该协议允许更简单地运行 Java 类,并且无需太多样板
下面一起来看个例子。通常,我们初学 Java 的时候,都会写类似下面这样的 Hello World 程序:
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }
对于程序的功能来说,这里有太多的混乱的代码、太多的概念、太多的构造。
- Class 声明和强制的 public 访问修饰符是必须的。当用在外部组件定义良好的接口封装代码单元时,它们很有用。但在这个小例子中,它们毫无意义。
- String[] 参数主要用于将代码与外部组件(在本例中为操作系统的 shell,接收命令传入的参数)连接。它在这里很神秘且无用,尤其是它从未被使用过。
- static 修饰符是 Java 类和对象模型的一部分。对于新手来说,这不仅是神秘的,而且是有害的:要添加更多可以调用和使用的方法或字段,必须要么将它们全部声明(传播一种既不常见也不是好习惯的用法),或者就要面对是否有 static 修饰的区别问题,并学习如何实例化对象。
使用 Java 21 的 JEP 445 特性,该例子将简化为:
class HelloWorld { void main() { System.out.println("Hello, World!"); } }
如上例子,Java 21 增强了启动 Java 程序的协议,以允许实例使用 main 方法,且该方法不需要 static
、不需要 public
、也不需要任何参数。
其次,Java 21 还引入未命名的类来使声明隐式,像下面这样就可以了:
void main() { System.out.println("Hello, World!"); }