我有三个名为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();
}
}
SecondClass.java
public class SecondClass {
public void secondMethod(){
ThirdClass thirdClass = new ThirdClass();
thirdClass.thirdMethod();
}
}
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?");
}
}
在最后的方法(这里是ThirdClass.thirdMethod()
)上,我需要打印方法调用的来源(我的意思是调用层次结构)。那么我需要在thirdMethod()
中为那个
答案 0 :(得分:5)
尝试这样的方法来访问当前线程的堆栈:
Thread.currentThread().getStackTrace();
这将返回一个StackTraceElement
数组,然后您可以打印或检查或执行任何操作。
但是,请注意:如果您的方法的行为有所不同,具体取决于您的方法的调用者(例如,通过分析堆栈并对其做出反应),您可以创建一些非常罕见和意外的行为anybode使用这样的代码。
答案 1 :(得分:5)
请参阅Thread
的文档。
特别是,Thread.currentThread().getStackTrace()
检索有关跟踪的信息,Thread.dumpStack()
打印当前的堆栈跟踪。
没有必要使用Exception
或其他任何东西。
答案 2 :(得分:4)
尝试这个简单的事情:
Thread.dumpStack();
将当前线程的堆栈跟踪打印到标准错误流。
供参考,http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html
微妙的说明,它正在写入错误流,因此您可以像标准控制台输出那样重定向它:
java FirstClass >normaloutput.log 2>yourstackdumps.log
答案 3 :(得分:1)
您可以尝试Thread.currentThread()。getStackTrace()
它返回一个StackTraceElement数组,它有一个方法getClassName()
答案 4 :(得分:1)
您可以尝试Thread.currentThread().getStackTrace()