IntelliJ IDEA 2025.2 Help

教程:设置值

从本教程中,您将学习如何使用一种最基本但非常有用的调试器功能: 设置值

在调试时,您可以获取变量的信息并检查它们,以了解程序为何以特定方式运行。 有时候,您会希望重现一些依赖于某个变量的错误。 要做到这一点,您需要这个变量保存一个特定的值。

在运行时不修改程序的情况下重现一些条件可能会很繁琐且费时,因此大多数情况下,您可以通过调试器直接设置变量值从中受益。

问题

让我们来看下面这个简单的程序:

import java.util.*; class Aquarium { private ArrayList<Fish> fish; public static void main(String[] args) { var aquarium = new Aquarium(); System.out.println(aquarium.getFish()); // fish has already been initialized System.out.println(aquarium.getFish()); // line n1 } private ArrayList<Fish> getFish() { if (fish == null) initFish(); return fish; } private void initFish() { fish = new ArrayList<>(Arrays.asList( new Fish("Bubbles"), new Fish("Calypso"), new Fish("Dory") )); } } class Fish { private String name; Fish(String name) { this.name = name; } public String toString() { return name; } }

在此代码中,我们有一个实例变量 fish ,该变量被打印了两次。 它采用了延迟初始化,这在我们的情况下意味着该字段在调用其 getter 方法之前不会被赋值。

考虑这样一种情况:您已经执行到 line n1 ,并且 fish 已经被初始化,但您想查看 initFish 方法? 此方法仅在 (fish == null) 计算结果为 true 时才会执行,而在 line n1 时已不再是这种情况。

对于这个简单的程序,我们可以直接重新启动会话。 然而,在更复杂的情况下,您可能会发现重新启动会话并重现导致某种状态的步骤非常不方便。 让我们学习更聪明的方法。

解决方案

  1. 根据问题描述,在 line n1 暂停程序。

    程序暂停在第 n1 行——main() 方法的最后一行
  2. getFish() 方法中设置一个断点。

    getFish() 方法中的断点
  3. 变量 选项卡上,展开 aquarium ,右键点击 fish ,然后选择 设置值

    Variables 选项卡中的 'fish' 列表
  4. 请输入 null。 按下 Enter

    将 'fish' 字段设置为 null
  5. F9 以恢复调试器会话。

现在条件计算结果为 true ,我们再次进入 initFish 方法,这使我们能够看到它如何执行初始化。

汇总

此场景说明了如何在运行时修改变量以更改程序的执行流程。 虽然这个例子非常简单,您可以在更复杂的项目中应用相同的原则,这个功能将为您节省大量时间。

最后修改日期: 2025年 9月 22日