教程:设置值
最后修改时间:2023 年 7 月 10 日从本教程中,您将学习如何使用最基本但非常有用的调试器功能之一:设置值。
在调试时,您可以获得有关变量的信息并检查它们,以便了解程序以特定方式运行的原因。其他时候,您可能想要重现一些错误,这取决于某些变量。为此,您需要此变量来保存特定值。
在运行时不修改程序的情况下重现某些条件可能会很乏味且耗时,因此大多数时候您会受益于直接从调试器设置变量值。
问题
让我们看一下下面的简单程序:
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
被打印两次的实例变量 ( )。变量的 getterfish
采用延迟初始化,这意味着该对象仅在第一次需要时才初始化。
现在,如果fish
已经初始化了(假设我们位于line n1
),并且我们想要查看该initFish
方法怎么办?(fish == null)
仅当计算结果为 时才会执行此方法true
。
在这个简单的例子中,我们可以在方法中放置一个断点并重新启动会话。然而,在更复杂的情况下,您可能会发现重新启动会话并执行导致特定状态的所有步骤非常不方便。现在让我们学习更聪明的方法。
解决方案
所以,我们现在处于line n1
,我们需要ArrayList
在initFish
方法中单步执行初始化。
在方法中放置断点
initFish
。在变量选项卡上,展开
aquarium
,右键单击fish
,然后选择设置值。进入
null
。按。Enter提示
此示例显示将变量设置为
null
,但是您可以将其更改为正确类型的任何值。例如,要将其更改为另一个Fish
对象,我们可以编写或输入可从当前作用域访问的new Fish("Flounder");
某个变量的名称。Fish
按可恢复调试器会话。F9
现在条件计算为true
,我们可以单步执行该initFish
方法并查看它如何执行初始化。
概括
本教程中的示例说明了如何在运行时修改变量以更改程序的流程。虽然示例非常简单,但您可以在更复杂的项目中应用相同的原理,其中此功能将为您节省大量时间。
感谢您的反馈意见!