IntelliJ IDEA 自早期版本以来就支持 Java 24,并且在 后续版本 中添加了更多增强功能!
我经常被问到:“Java 24 最好的特性是什么?” 我的答案是?为什么只选一个?🙂
Java 24 继续通过诸如简单源文件和实例主方法、模式中的原始类型、instanceof 和 switch、模块导入声明、灵活的构造函数主体以及API 增强等改进来增强语言。
Java 最大的优势之一是其可预测的六个月发布节奏,允许开发者定期探索正式版和预览版功能。然而,每六个月更新一次新功能可能会让人感到不知所措。在这篇博文中,我将带您了解 Java 24 的几个关键功能——它们是什么、如何使用它们以及 IntelliJ IDEA 如何支持它们。但首先,让我们确保您已做好正确的准备。
简单的源文件和实例主要方法(JEP 495)
隐式类和 import
语句、更短的 main()
方法、println()
以及输出值——让 Java 初学者更容易上手。如果您是一位经验丰富的开发者,这些功能可以帮助您使用更少的代码行创建脚本、游戏和实用程序。
如果您不熟悉此功能,建议您查看我的入门博文,以及详细的博文——Java 24:用更少的样板代码构建游戏、原型、实用程序等,其中详细介绍了此功能的实际用例。
使用实例 main 方法创建一个简单的源文件
使用 IntelliJ IDEA 创建并运行简单文件时,您可以像运行其他可执行类一样运行它(这样就无需指定编译或运行时命令行参数了)。如果您忘记将语言级别设置为 24,IntelliJ IDEA 可以检测到并提示您进行设置(如下所示):
将隐式类更改为常规类
当您准备升级并使用其他概念(例如用户定义类)时,可能需要将隐式类转换为常规类。您可以使用上下文操作“将隐式声明的类转换为常规类”,如下所示(此操作将添加相关的导入语句):
将常规类转换为隐式类
有时,打包类可能更适合作为隐式类,因为它可能不使用常规类中的概念。如果是这样,您可以使用“转换为隐式声明的类”操作来实现(如下所示)。在转换过程中,IntelliJ IDEA 将删除不再需要的 import
语句:
幕后——具有实例方法 main() 的隐式类
在后台,Java 编译器会创建一个隐式顶级类,它具有无参数构造函数,因此这些类不需要以不同于常规类的方式处理。
下面是一个 gif,向您展示了源代码文件 AnimateText.java
的反编译类(通过 IntelliJ IDEA 中的反编译器功能):
与控制台交互 – println() 与 System.out.println() 调用
为了让新开发人员更轻松地与控制台交互,即将消息输出到控制台并从中读取输入,java.io.IO
在 Java 23 中创建了一个新类——它仅包含少量重载 readln()
和 println()
方法(如下所示):
类会自动导入到隐式类中。因此,现在您可以使用 java.io.IO
来将消息输出到控制台(并使用 readln()
从控制台读取消息),而无需使用 System.out.println()
。
隐式类中的重载 main 方法
当你在隐式类中重载 main()
方法时,会有一个优先顺序来决定是否将其视为“唯一”main()
方法。以下所有方法都是隐式类中方法的有效签名:
public static void main(String[] args) {}
public void main(String[] args) {}
public static void main() {}
static void main() {}
public void main() {}
void main() {}
当您的隐式类中存在重载 main()
方法时,IntelliJ IDEA 会在正确或首选的“main”方法旁边显示运行图标:
隐式类中缺少主要方法
如果在隐式类中没有检测到有效的 main 方法,IntelliJ IDEA 可以为您添加一个,如下面的 gif 所示:
模式、instanceof 和 switch 中的原始类型(预览功能)
目前处于第二个预览阶段的“模式中的原始类型、instanceof 和 switch”功能,增强了 Java 的模式匹配能力,使得您可以直接将原始类型模式与 instanceof
和 switch
表达式结合使用,从而简化代码并减少手动类型转换的需求。
一个简单的例子
此功能使您能够在具有保护模式的 switch
表达式中使用原始类型,如下所示:
public String getHTTPCodeDesc(int code) {
return switch(code) {
case 100 -> "继续";
case 200 -> "确定";
case 301 -> "永久移动";
case 302 -> "找到";
case 400 -> "错误请求";
case 500 -> "内部服务器错误";
case 502 -> "错误网关";
case int i when i > 100 && i < 200 -> "信息性";
case int i when i > 200 && i < 300 -> "成功";
case int i when i > 302 && i < 400 -> "重定向";
case int i when i > 400 && i < 500 -> "客户端错误";
case int i when i > 502 && i < 600 -> "服务器错误";
default -> "未知错误";
};
}
模块导入声明
在第二个预览版中,模块导入声明 允许您通过单个声明导入模块导出的所有包。它简化了模块库的复用,而无需将导入代码本身模块化。
假设您的代码包含多个导入语句:
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.lang.reflect.*;
import java.nio.*;
这些可以用导入模块语句替换,如下所示:
import module java.base.*;
概括
Java 24 引入了一些关键增强功能,例如简单源文件、原始类型模式、模块导入声明和灵活的构造函数体。IntelliJ IDEA 自早期版本起就已支持 Java 24,并在后续版本中添加了更多增强功能!
IntelliJ IDEA 提供智能代码建议、无缝转换和强大的分析功能,简化了 Java 24 功能的采用。其支持功能可确保 Java 不断发展,提供顺畅的开发体验。