堆栈轨迹(stack trace)
-
签名:
public StackTraceElement[] getStackTrace()
-
释义:返回一个表示该线程堆栈转储的堆栈跟踪元素数组。如果该线程尚未启动过已经终止,则该方法将返回一个零长度数组。如果返回的数组不是零长度的,则其第一个元素代表堆栈顶,它是该序列中最新的方法调用。最后一个元素代表堆栈底,是该序列中最旧得方法调用。
-
返回:StackTraceElement数组,每个数组代表一个堆栈帧。
-
-
getStackTrace()
返回的数组长度为0的情况- 这个线程没有被开启
- 这个线程被开启了但是没有被系统运行过(OS知识)
- 线程已结束
-
代码演示:
public static void main(String[] args) { StackTraceElement[] stackTraceElements=Thread.currentThread().getStackTrace(); System.out.println("The stackTraceElements length:"+stackTraceElements.length); for(int i=0;i<stackTraceElements.length;i++){ System.out.println("\n---the "+i+" element"+"---"); System.out.println("toString:"+stackTraceElements[i].toString()); System.out.println("ClassName:"+stackTraceElements[i].getClassName()); System.out.println("FileName:"+stackTraceElements[i].getFileName()); System.out.println("LineNumber:"+stackTraceElements[i].getLineNumber()); System.out.println("MethodName:"+stackTraceElements[i].getMethodName()); } printStackInfos(); } private static void printStackInfos(){ StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace(); System.out.println("\nCalled in printStackInfos() method!!!"); System.out.println("The stackTraceElements length:"+stackTraceElements.length); for(int i =0;i<stackTraceElements.length;i++){ System.out.println("\n---the "+i+" element"+"---"); System.out.println("toString:"+stackTraceElements[i].toString()); System.out.println("ClassName:"+stackTraceElements[i].getClassName()); System.out.println("FileName:"+stackTraceElements[i].getFileName()); System.out.println("LineNumber:"+stackTraceElements[i].getLineNumber()); System.out.println("MethodName:"+stackTraceElements[i].getMethodName()); } }
- 运行结果(着重看
printStackInfos
方法的影响):
The stackTraceElements length:2
—the 0 element—
toString:java.lang.Thread.getStackTrace(Thread.java:1559)
ClassName:java.lang.Thread
FileName:Thread.java
LineNumber:1559
MethodName:getStackTrace—the 1 element—
toString:com.bohr.exercise.Temp.main(Temp.java:5)
ClassName:com.bohr.exercise.Temp
FileName:Temp.java
LineNumber:5
MethodName:mainCalled in printStackInfos() method!!!
The stackTraceElements length:3—the 0 element—
toString:java.lang.Thread.getStackTrace(Thread.java:1559)
ClassName:java.lang.Thread
FileName:Thread.java
LineNumber:1559
MethodName:getStackTrace—the 1 element—
toString:com.bohr.exercise.Temp.printStackInfos(Temp.java:18)
ClassName:com.bohr.exercise.Temp
FileName:Temp.java
LineNumber:18
MethodName:printStackInfos—the 2 element—
toString:com.bohr.exercise.Temp.main(Temp.java:15)
ClassName:com.bohr.exercise.Temp
FileName:Temp.java
LineNumber:15
MethodName:mainProcess finished with exit code 0
- 方法解释:
- 运行结果(着重看