IntelliJ IDEA 2025.1 Help

分析数据流

在处理大型代码库时,有时很难弄清楚数据是如何处理的,以及如何改进工作流程以使代码更高效和可读。 为了实现这一目标,IntelliJ IDEA 数据流分析使您能够在不运行程序的情况下追踪所有可能的数据转换。 这些信息可用于改进应用程序设计并在错误出现之前进行诊断。

数据流分析提供以下信息:

  • 方法或表达式下游的数据会发生什么变化:有哪些消费者,可能会产生哪些值。

  • 一个方法可以具有的所有可能输入值及特定值的来源。

  • 变量是否可能为 null。 利用这些信息,您可以防止意外的 NullPointerExceptions,并通过移除多余的空检查和 @Nullable 注解来优化您的工作流程。

查看分析结果

  1. 将文本光标放置在代表您想分析的数据的标识符处。 您可以选择在声明、语句、方法参数等地方分析该符号。

    选择符号进行分析
  2. 在主菜单中,请前往 代码 | 分析代码 | 数据流到这里 分析上游数据(生产者)或 代码 | 分析代码 | 从这里开始的数据流 分析下游数据(消费者)。

  3. 指定分析范围。 如果您想排除测试内容,请清除 包含测试代码 复选框。

    同时,如果您对某个特定的值或表达式结果感兴趣,您可以在 筛选 字段中指定它,以仅显示相关结果(在 数据流到此 中可用)。

    筛选示例

    null/non-null 值

    null!null

    String

    "Hello"

    enum

    SPRINGSUMMERFALLWINTER

    布尔

    truefalse

    int/long

    0>0<=100!=9

    分析数据流对话框

工具窗口打开,包含分析结果。 它们被组织在节点中,每个节点代表一个数据流步骤。

在工具窗口中的分析结果

在示例中:

  • getComplete() 方法返回 complete 变量的值。

  • complete 变量可以在初始化期间分配 null ,或在 setComplete 方法中获取任何值。

  • 在第 17 行和第 48 行调用了 setComplete() 方法,并分别分配了 falsetrue 值。

刷新结果

  • 如果代码已更改,并且您想再次分析相同的表达式,请在 刷新 工具窗口中点击 分析

分析可能的值

当查看 数据流到此处 时,您可以按值对节点进行分组以获取可能值的汇总或分析它们的来源。

  • 若要获取有关特定值的信息,请点击 按叶表达式分组分析 工具窗口的左侧部分。

  • 要获取有关空值/非空值的信息,请点击 按叶子表达式的空值分组 工具窗口左侧的 分析

导出到文件

如果您想以文本格式分享分析结果,请使用 导出 选项。

  1. 选择您要导出的分析选项卡。

  2. 请点击 导出到文本文件 位于 分析 工具窗口的左部。

  3. 如果您想将结果复制到剪贴板,请点击 复制。 要将结果导出到文件,请在 导出到文件 字段中选择文件,然后点击 保存

分析堆栈跟踪

当您的程序因异常而崩溃时,您可以使用堆栈跟踪作为数据流分析的输入。 这有助于您跟踪不适当的值可能来自哪里。

public class ArrayTest { static int[] ints = new int[5]; public static void main(String[] args) { ArrayTest arrayTest = new ArrayTest(); int a = arrayTest.getRandomElement(ints); System.out.println(a); } private int getRandomElement(int[] array) { int index = new java.util.Random().nextInt(20); return array[index]; } }

以上代码创建了一个固定大小的数组,并尝试访问其中的一个随机元素。 有时它会抛出一个 ArrayOutOfBoundsException ,因为索引可能大于数组的长度。

  1. 在堆栈跟踪中,点击抛出异常的帧的源引用。

    堆栈跟踪

    编辑器会将您带到源代码中的相应行。

  2. 点击弹出窗口以查找导致异常的值的来源。

    堆栈跟踪

数据流到此 使用应用的过滤器打开。

最后修改日期: 2025年 4月 24日