3

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

第一类.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();
    }

}

第二类.java

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

}

第三类.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?");
    }
}

在最终方法(这里是ThirdClass.thirdMethod())上,我需要打印方法调用的来源(我的意思是调用层次结构)。所以我需要为此写thirdMethod()什么

4

5 回答 5

6

请参阅Thread.

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

不需要奇怪的黑客Exception或任何东西。

于 2013-11-07T07:14:03.900 回答
5

尝试这样的事情来访问您当前线程的堆栈:

Thread.currentThread().getStackTrace();

这将返回一个数组,StackTraceElement然后您可以打印或检查或做任何您想做的事情。

但是,在此要小心:如果您的方法的行为因方法的调用者而异(例如,通过分析堆栈并对其做出反应),您可以使用这样的代码为任何类型的代码创建一些非常不常见和意外的行为。

于 2013-11-07T07:13:00.243 回答
4

试试这个简单的事情:

Thread.dumpStack();

将当前线程的堆栈跟踪打印到标准错误流。

供参考,http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html

微妙的注意,它正在写入错误流,因此您可以将其重定向到不同于标准控制台输出的方式,如下所示:

java FirstClass >normaloutput.log 2>yourstackdumps.log
于 2013-11-07T07:13:34.220 回答
1

你可以试试Thread.currentThread().getStackTrace()

于 2013-11-07T07:13:10.210 回答
1

你可以试试 Thread.currentThread().getStackTrace()

它返回一个 StackTraceElement 数组,它有一个方法 getClassName()

于 2013-11-07T07:12:42.987 回答