Java 程序流从主

Java 程序流从主,java,Java,假设 public class A{ public void doSomethingInMethodA(){ int a =0; System.out.println("value of a :"+a); } public static void main(String[] args) { new A().doSomethingInMethodA(); new B().doSomethingInMetho

假设

public class A{
    public void doSomethingInMethodA(){
        int a =0;
        System.out.println("value of a :"+a);  
    }
    public static void main(String[] args) {
        new A().doSomethingInMethodA();
        new B().doSomethingInMethodB();
    }
}
class B{
    public void doSomethingInMethodB(){
        int b =0;
        System.out.println("value of b :"+b);
        C c = new C();
        c.doSomethingInMethodC();
    }
}
class C{
    public void doSomethingInMethodC(){
        int c =0;
        System.out.println("value of c :"+c);
    }
}
现在我如何通过编程知道程序的流程

比如,如果我向某个解析器类提供类A(带有main方法的类)的名称,那么解析器类应该告诉我程序的流程,比如

编辑

A(class with main)
             -> doSomethingInMethodA()(Class A)
             -> doSomethingInMethodB()(Class B) ->doSomethingInMethodC()(Class C)
program flow ends
where -> means it calls
我想通过反射是不可能的,因为你不能问java.lang.reflect.Method你调用了哪些方法

是否可以使用
StackTraceElement
?我甚至听说AspectJ做过类似的事情


那么如何实现它呢?

如果您想要一般地记录任何给定程序的执行流,您可以使用字节码指令插入。考虑使用和实现你的目标。看看这个


无论如何,这并不容易,但肯定是可行的。

您想分析类并检查所有可能的代码路径,还是运行程序并逐步了解执行过程中发生的情况?换句话说,这是静态分析还是动态分析?这比源代码更有帮助吗?至少源代码不含糊。您想创建描述程序的英文散文吗?为此,您需要构建Java编译器的等价物,其目标是英文散文而不是字节码。你的结果充其量也是站不住脚的。@MarkoTopolnik:好吧,op可以尝试把它编译成莎士比亚的语言,这一点都不站不住脚;-)在你看来,“找到程序流程”是什么意思?程序流的复杂度与源代码的复杂度顺序相同,因此,为了从重写源代码之外获得任何好处,您需要引入一些有损转换规则,从it中提取一个方面或另一个方面。感谢链接,我将遵循它