Java线程类StackTraceElement [] getStackTrace()方法(带示例)

线程类StackTraceElement [] getStackTrace()

  • 包java.lang.Thread.getStackTrace()中提供了此方法。

  • 此方法用于返回表示线程的堆栈转储的堆栈跟踪元素数组。

  • 此方法不是静态的,因此该方法可通过Thread类对象访问,而无法通过类名称访问。

  • 此方法返回一个堆栈跟踪元素数组,并且堆栈在堆栈的顶部和底部具有两个术语。堆栈的顶部包含在层次结构或序列中的最后一个调用的方法,堆栈的底部包含在层次结构或序列中的第一个调用的方法。

  • 此方法的返回类型为StackTraceElement [],因此它返回一个堆栈跟踪元素数组。

  • 如果不允许checkPermission方法获取堆栈跟踪元素,则此方法引发异常。

语法:

    StackTraceElement[] getStackTrace(){
    }

参数:

在Thread方法中,我们不传递任何对象作为参数。

返回值:

此方法的返回类型为StackTraceElement [],它返回一个堆栈跟踪元素数组,每个堆栈元素表示一个堆栈帧。

Java程序演示getStackTrace()方法示例

/*  We will use Thread class methods so we are importing 
    the package but it is not mandate because 
    it is imported by default
*/

import java.lang.Thread;

class GetStackTrace {
    public static void main(String[] args) {
        //调用main1()方法 
        //然后此方法将首先调用
        main1();
    }

    public static void main1() {
        //我们从main1()方法调用main2()方法,然后 
        //之后调用 
        //[即此方法main2()在第二个位置
        main2();
    }

    public static void main2() {
        //我们从main2()方法调用main3()方法,然后 
        //该方法将在第二个方法main2()之后调用
        //[即此方法main3()将在第三个位置调用
        main3();
    }

    public static void main3() {
        //为堆栈跟踪元素创建参考
        StackTraceElement[] ste = Thread.currentThread().getStackTrace();
        System.out.println("We are using for loop to display stack trace elements");
        for (StackTraceElement stack_tra_ele: ste)
            System.out.println(stack_tra_ele);
    }
}

输出结果

E:\Programs>javac GetStackTrace.java

E:\Programs>java GetStackTrace
We are using for loop to display stack trace elements
java.lang.Thread.getStackTrace(Thread.java:1589)
GetStackTrace.main3(GetStackTrace.java:29)
GetStackTrace.main2(GetStackTrace.java:22)
GetStackTrace.main1(GetStackTrace.java:15)
GetStackTrace.main(GetStackTrace.java:7)
猜你喜欢