如何在java中获取调用层次结构

Ani*_*ony 3 java stack-trace call-hierarchy

我有三个名为的课程FirstClass,SecondClass and ThirdClass.以下是三个类的来源:

FirstClass.java

public class FirstClass {
    public void firstMethod(){
        SecondClass secondClass = new SecondClass();
        secondClass.secondMethod();
    }
    public static void main(String[] args) {
        FirstClass firstClass = new FirstClass();
        firstClass.firstMethod();
    }

}
Run Code Online (Sandbox Code Playgroud)

SecondClass.java

public class SecondClass {
    public void secondMethod(){
        ThirdClass thirdClass = new ThirdClass();
        thirdClass.thirdMethod();
    }

}
Run Code Online (Sandbox Code Playgroud)

ThirdClass.java

public class ThirdClass {
    public void thirdMethod(){
        System.out.println("Here i need to print where the call comes from,(call hierarchy) Is it possible?");
    }
}
Run Code Online (Sandbox Code Playgroud)

在最后的方法(这里是ThirdClass.thirdMethod())我需要打印方法调用来自哪里(我的意思是调用层次结构).所以我需要写在thirdMethod()

Mat*_*ias 5

尝试这样的东西来访问当前线程的堆栈:

Thread.currentThread().getStackTrace();
Run Code Online (Sandbox Code Playgroud)

这将返回一个数组,StackTraceElement然后您可以打印或检查或执行任何操作.

但是,请注意:如果您的方法根据方法的调用者的不同而有所不同(例如,通过分析堆栈并对其做出反应),您可以使用这样的代码为anybode创建一些非常罕见且意外的行为.


Jas*_*n C 5

请参阅的文档Thread

特别是,Thread.currentThread().getStackTrace()检索有关跟踪的信息,并Thread.dumpStack()打印当前的堆栈跟踪。

不需要Exception任何怪异的技巧。