在 IntelliJ IDEA 中构建 Java 应用程序
此页面由 Marit van Dijk 在 UPL 下贡献概述
IDE(集成开发环境)通过将源代码编辑器与编译和运行代码的能力相结合,以及与构建、测试和调试工具、版本控制系统等的集成,使您能够快速创建应用程序。最后,IDE 将允许您以文件系统无法实现的方式搜索和导航代码库。
Java 最广泛使用的集成开发环境 (IDE) 之一是 IntelliJ IDEA。其用户友好的界面、丰富的功能集和庞大的生态系统使其成为初学者学习和成长为开发人员的理想环境。在本教程中,您将学习如何使用其一些功能来简化您的开发流程,并加快您使用 Java 编程的学习曲线。
安装 IntelliJ IDEA
要安装 IntelliJ IDEA,请从 IntelliJ IDEA 网站 下载您要使用的版本,并按照说明进行操作。请注意,IntelliJ IDEA 提供两个版本
- IntelliJ IDEA 社区版 - 免费且开源。它提供了 Java 开发所需的所有基本功能。
- IntelliJ IDEA 旗舰版 - 商业版,随 30 天试用期一起分发。它提供了用于 Web 和企业开发的额外工具和功能。
对于本教程,您可以下载社区版。有关在您的操作系统上安装 IntelliJ IDEA 的更多信息,请参阅 文档。
当您第一次启动 IntelliJ IDEA 时,您将看到欢迎屏幕。从这里,您可以创建一个新项目、打开一个现有项目或从版本控制系统(如 GitHub)获取一个项目。
要开始使用 Java,您需要安装 JDK。您可以按照 Java 入门 中的说明自行完成此操作,也可以在 IntelliJ IDEA 中创建新项目时完成此操作,而无需从 IDE 和其他工具(如浏览器、文件系统等)切换到下载和配置 JDK。
创建新项目
我们可以从欢迎屏幕创建新项目,也可以在主菜单中转到文件 | 新建 | 项目。
在新建项目向导中,确保左侧选择了Java,并为您的项目命名(例如,java-demo
)。接下来,我们将选择一个构建系统。IntelliJ IDEA 支持 Maven 和 Gradle;Java 最常用的构建系统。构建工具(如 Maven 或 Gradle)可以帮助您构建项目,并管理您要在 Java 代码中使用的任何依赖项(如附加库)。使用构建工具还可以更轻松地共享您的应用程序并在不同的机器上构建它。如果您不想使用两者中的任何一个,可以使用 IntelliJ 构建系统。在本教程中,让我们创建一个 Maven 项目。
要开发 Java 应用程序,我们需要 JDK。如果 IntelliJ IDEA 中已定义必要的 JDK,请从JDK列表中选择它。
如果 JDK 已安装在您的计算机上,但未在 IDE 中定义,请从列表中选择添加 JDK选项,并指定 JDK 主目录的路径(例如,/Library/Java/JavaVirtualMachines/jdk-21.0.2.jdk
)。
如果您计算机上没有必要的 JDK,请选择下载 JDK。在下载 JDK弹出窗口中,指定 JDK 供应商(例如,Oracle OpenJDK)和版本,根据需要更改安装路径,然后单击下载。
如果您选择添加示例代码,一个打印“Hello World”的Main
类将被添加到您的项目中。取消选中它,以便我们稍后添加自己的代码。
在您对新建项目弹出窗口中的输入感到满意后,单击创建。
IntelliJ IDEA 将为您创建一个项目,其中包含一个基本的pom.xml
和一个用于 Maven 项目的默认目录结构,其中定义了源文件夹。pom.xml
是一个文件,其中包含有关项目的信息和 Maven 用于构建项目的配置详细信息。有关更多信息,请参阅 Maven 文档。
我们可以在左侧的 项目工具窗口 中看到项目结构。.idea
文件夹包含您的项目配置。src
文件夹包含您的代码。当您展开该文件夹时,您会看到 IntelliJ IDEA 为您的 Java 代码创建了一个main
文件夹,为您的测试创建了一个test
文件夹。
让我们通过创建一个新类来添加一些代码。
- 在左侧的项目工具窗口中,选择
src/main/java
目录。 - 要添加一个新的 Java 类,请右键单击项目工具窗口以打开上下文菜单,然后选择新建 | Java 类。
- 将此类命名为
HelloWorld
。
IDE 提示
您可以使用快捷键⌘N(在 macOS 上)或Alt+Insert(在 Windows/Linux 上)添加一个新的 Java 文件。
编写和编辑代码
执行您的HelloWorld
Java 程序的入口点是 main 方法。通过键入以下内容添加 main 方法
public static void main(String[] args) {
}
我建议您键入代码,而不是粘贴,因为这将帮助您更熟悉语法。
为了简单起见,让我们使我们的程序将Hello World!
打印到控制台并移动光标到新行,方法是将System.out.println("Hello World!");
添加到方法体中
public static void main(String[] args) {
System.out.println("Hello World!");
}
当您开始键入时,您会注意到 IntelliJ IDEA 会为您提供 代码完成。它将帮助您完成类、方法、字段和关键字的名称以及其他类型的完成。使用箭头键从列表中选择您想要的选项,使用Return(在 macOS 上)或Enter(在 Windows/linux 上)键应用您的选择。
如果您的输入或选择无法编译,或者 IntelliJ IDEA 发现其他问题,它会向您显示。如果您按下Alt+Enter,它将提供修复问题的选项。您可以使用F2移动到下一个问题,使用Shift+F2移动到上一个问题。IntelliJ IDEA 将通过提供上下文敏感的建议来帮助您确保您的语法正确,并且您的代码可以编译。
为了加快开发速度,我们还可以 生成代码。IntelliJ IDEA 可以生成构造函数、getter 和 setter、toString()
、equals()
和 hashCode()
方法等等。
IntelliJ IDEA 会在您编写代码时管理代码的格式。如果需要,您可以使用快捷键⌘⌥L(在 macOS 上)或Ctrl+Alt+L(在 Windows/Linux 上)显式地重新格式化代码。
运行您的应用程序
使用 IDE 的一个主要好处是,您可以直接运行代码,而无需首先在命令行上手动编译它。
您可以通过单击类声明附近的代码行中的绿色运行按钮,或使用快捷键⌃⇧R(在 macOS 上)或Ctrl+Shift+F10(在 Windows/Linux 上)直接从编辑器运行HelloWorld
应用程序。
或者,我们可以使用右上角的绿色运行按钮,或使用快捷键⌃R(在 macOS 上)或Ctrl+F10(在 Windows/Linux 上)运行最新文件来运行我们的应用程序。
如果我们想将参数传递给我们的应用程序,我们可以在我们的 运行配置 中执行此操作。
要编辑您的运行配置,请通过单击当前配置旁边的向下箭头或运行配置右侧的三个点,然后选择编辑配置,在运行/调试配置切换器中选择该配置。
运行/调试配置弹出窗口将出现,您可以在其中修改 JVM 选项、添加程序参数等等。
测试
测试您的代码可以帮助您验证代码是否按预期执行。您可以运行您的应用程序并自行测试它,或者添加可以为您验证代码的自动化测试。考虑要测试的内容以及如何测试,可以帮助您将问题分解成更小的部分。这将帮助您更快地获得更好的解决方案!
例如,假设我们有一个Calculator
类,其中包含以下方法,该方法计算一组值的平均值,我们想确保平均值计算正确
public class Calculator {
public static double average(int[] numbers) {
int sum = 0;
for (int number : numbers) {
sum += number;
}
double avg = (double) sum / numbers.length;
return avg;
}
}
IntelliJ IDEA 使得为您的代码添加测试变得很容易。您可以使用快捷键⇧⌘T(在 macOS 上)或Ctrl+Shift+T(在 Windows/Linux 上)导航到特定类的测试。如果尚未创建测试类,IntelliJ IDEA 将为您创建一个。此类将在src/test/java
目录中创建。我们可以在创建测试弹出窗口中选择一个测试库。
IntelliJ IDEA 支持多个测试库,包括 JUnit 5,它是 Java 开发人员最常用的测试库。如果您的项目中还没有 JUnit 5,IntelliJ IDEA 会注意到“模块中未找到 JUnit5 库”。单击修复以让 IntelliJ IDEA 为您修复此问题。
请注意,JUnit 5 依赖项junit-jupiter
已添加到pom.xml
的<dependencies>
部分中。要确保依赖项在您的项目中正常工作,请通过单击右上角的弹出窗口,或使用快捷键⇧⌘I(在 macOS 上)或Ctrl+Shift+O(在 Windows/Linux 上)加载 Maven 更改。
返回测试文件以添加测试。我们可以让 IntelliJ IDEA 帮助我们生成测试。在测试类中,我们可以使用生成(在 macOS 上为⌘N,在 Windows/Linux 上为Alt+Insert),然后选择测试方法以添加测试。为测试命名,以解释预期的行为,并添加相关的测试代码。
例如,让我们确保average()
方法正确计算正数数组的平均值,并为空数组返回0
。您可能希望为不同的场景添加其他测试,例如负数数组、正数和负数的混合数组等等。
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class CalculatorTest {
@Test
void shouldCalculateAverageOfPositiveNumbers() {
int[] numbers = {1, 2, 3, 4, 5};
double actualAverage = Calculator.average(numbers);
double expectedAverage = 3.0;
assertEquals(expectedAverage, actualAverage);
}
@Test
void shouldReturnZeroAverageForEmptyArray() {
int[] numbers = {};
double actualAverage = Calculator.average(numbers);
double expectedAverage = 0;
assertEquals(expectedAverage, actualAverage);
}
}
在我们的测试类中,我们可以选择运行所有测试(在 macOS 上为⌃⇧R,在 Windows/Linux 上为Ctrl+Shift+F10)。
在我们的示例中,我们看到第二个测试失败了。我们预计空数组的平均值为0
,但实际上得到了NaN
(非数字)。让我们使用调试器找出原因。
调试
我们可能希望查看代码的运行方式,无论是为了帮助我们了解代码的工作原理,还是当我们需要修复错误或失败的测试(如上面的测试)时。我们可以通过 调试器 运行我们的代码,以查看不同时间变量的状态以及调用堆栈 - 程序执行时方法调用的顺序。为此,我们必须首先在代码中添加一个 断点。
要添加断点,请单击代码行旁边的代码行号,您希望执行在此处停止。或者,将光标放在该行并按 **⌃F8**(在 macOS 上)或 **Ctrl+F8**(在 Windows/Linux 上)。我们可以使用 **Debug** 选项运行测试或应用程序;可以通过右键单击代码行号处的 **Run** 按钮并从列表中选择 **Debug** 选项,或者通过选择右上角的 **Debug** 按钮来实现。
执行将在断点处停止,因此我们可以调查应用程序的状态。我们可以查看变量和对象的当前值。我们可以评估表达式,以查看其当前值并查看更多详细信息。我们甚至可以更改表达式以评估不同的结果。我们可以通过以下两种方式继续执行:进入方法以查看调用方法内部发生了什么(使用快捷键 **F7** 或 **Debug** 工具窗口中的相应按钮),或者跨过一行以转到下一行,即使调用了方法(使用快捷键 **F8** 或 **Debug** 工具窗口中的相应按钮),具体取决于我们感兴趣的内容。最后,我们可以恢复程序以完成测试的执行。
让我们调试上一节中失败的测试。在代码中,在第 4 行设置断点。通过调试器运行失败的测试。跨过代码,直到到达第 8 行,并观察变量的值。当我们到达第 8 行时,选择 `sum / numbers.length`,右键单击以打开上下文菜单,然后选择 **Evaluate Expression**。按 **Enter** 评估选定的表达式。我们看到 `sum / numbers.length` 导致 `java.lang.ArithmeticException: / by zero`。空数组的长度为 `0`,而 Java 不允许除以零。当我们评估 `(double) sum / numbers.length` 时,我们得到结果 `NaN`。我们期望 `0`,因此我们的测试失败。
由于我们在初始实现中没有考虑这种情况,因此我们可以通过更改方法,使其在给出空数组作为输入时返回 `0` 来解决此问题。
public class Calculator {
public static double average(int[] numbers) {
if (numbers.length == 0) {
return 0;
}
int sum = 0;
for (int number : numbers) {
sum += number;
}
double avg = (double) sum / numbers.length;
return avg;
}
}
现在,当我们运行测试时,我们看到它们通过了。
有关调试的更多信息,请参阅 Debugging in Java。
重构代码
在使用代码时,我们可能希望进行一些小的改进,而不会改变功能。我们可以使用 重构 来重塑代码。
- 我们可以使用 **Refactor | Rename**(在 macOS 上为 **⇧F6**,在 Windows/Linux 上为 **Shift+F6**)重命名类、变量和方法。
- 我们可以根据需要内联变量(在 macOS 上为 **⌘⌥N**,在 Windows/Linux 上为 **Ctrl+Alt+N**)或提取变量(在 macOS 上为 **⌘⌥V**,在 Windows/Linux 上为 **Ctrl+Alt+V**)。
- 我们可以通过提取方法(在 macOS 上为 **⌘⌥M**,在 Windows/Linux 上为 **Ctrl+Alt+M**)并将方法命名为有意义的名称,将长方法分解成更小的部分。
所有这些选项都有助于我们将代码重构为更熟悉的样式,或者使用新的习惯用法和语言特性。
使用快捷键 **⌃T**(在 macOS 上)或 **Ctrl+Alt+Shift+T**(在 Windows/Linux 上)调出重构菜单以查看可能的操作。
记录代码
我们可以向代码添加文档。IntelliJ IDEA 为文档注释提供代码补全,默认情况下启用此功能。在声明之前键入 `/**` 并按 **Enter**。IntelliJ IDEA 会为您自动完成文档注释。
IntelliJ IDEA 提供了一种方法,使您可以轻松地理解和阅读 JavaDoc 注释,方法是选择 *Reader Mode*。使用 **^⌥Q**(在 macOS 上)或 **Ctrl+Alt+Q**(在 Windows/Linux 上)在编辑器中 **切换阅读器模式**。如果要将所有注释显示在阅读器模式中,请右键单击代码行号处的图标,然后选择 **Render All Doc Comments**。
搜索和导航
IntelliJ IDEA 还通过提供以下方式来帮助我们浏览代码库,例如在文件之间来回移动、查找用法和声明、查找接口及其实现、查看最近打开的文件和位置,甚至按名称打开窗口。
一种流行的搜索方式是 Search Everywhere(使用两次 **Shift**)。Search Everywhere 允许您搜索项目文件和目录,以及项目设置和 IntelliJ IDEA 设置。
另一种流行的搜索方式是 Find in Files。从主菜单中使用 **Edit | Find | Find in Files** 打开 **Find in Files**,或者使用快捷键 **⌘⇧F**(在 macOS 上)或 **Ctrl+Shift+F**(在 Windows/Linux 上)。您可以将结果从 **In Project** 缩小到 **Module**、**Directory** 或 **Scope**。
总结
在本文中,我们了解了 IntelliJ IDEA 如何在编写代码、运行应用程序、添加测试和使用调试器来帮助弄清楚代码如何运行、重构代码等方面为您提供代码建议和代码补全。
IntelliJ IDEA 不断改进和发展,添加新功能并提供新的集成。您可以通过查看 文档、博客、YouTube 频道 或 指南 来提高您的编码技能。
更多学习
上次更新: 2024 年 4 月 22 日
返回教程列表