Java 程序执行语句的顺序

问题描述 投票:0回答:1

给定一个 Java 程序,我想运行它并确定执行的语句的顺序。例如,运行程序时

import java.util.Scanner;

public class Temp {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);  // line 4
        int n = sc.nextInt();
        int m = n;
        if (n > 0) {
            m = 2 * n;
        } else {
            m = 3 * n;
        }
    }
}

使用负整数作为输入,我想获得序列 4, 5, 6, 7, 10(可能没有 7),指的是执行的行。

当然,总是可以在源代码中的每条语句后面添加一个System.out.println,但我想知道是否有一种更优雅的方法。

java code-coverage execution
1个回答
0
投票

我不认为它会那样工作。尽管您可以先在

System.out
中收集这些行号,然后在末尾显示它们,但您肯定必须对执行的每一行使用
List

如果你真的想自动获取行号,你必须获取堆栈跟踪

Thread.currentThread().getStackTrace()[0].getLineNumber()

这将为您提供当前所在的行号(这显然是该确切语句的编号)。如果您愿意,也可以将其移至单独的函数,然后向上移动堆栈跟踪以获取行号。

但是你真的不应该这样做。获取堆栈跟踪是 Java 中最昂贵的操作之一。您确实不想对执行的每个语句都执行此操作,除非性能对您来说完全没有价值。

© www.soinside.com 2019 - 2024. All rights reserved.