首页 > 技术文章 > Java StackTraceElement的使用与理解

jonzone 2016-05-17 13:09 原文

本文代码转自StackTraceElement的用法

 

/**
 * StackTraceElement的用法
 */
public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {
        new TestM().OuterMethod();
    }

    
    public void methodA(){
        methodB();
    }
    
    public void methodB(){
        methodC();
    }

    public void methodC(){
        StackTraceElement[] stacks = Thread.currentThread().getStackTrace();
        for(StackTraceElement s: stacks){
            System.out.println("-------"+s.getMethodName()+" : "+s);
        }
    }
}

class TestM {
    public void OuterMethod(){
        new Test().methodA();
    }
}

 

===打印结果===:

-------getStackTrace : java.lang.Thread.getStackTrace(Unknown Source)
-------methodC : org.feinno.icm.cms.Test.methodC(Test.java:24)
-------methodB : org.feinno.icm.cms.Test.methodB(Test.java:20)
-------methodA : org.feinno.icm.cms.Test.methodA(Test.java:16)
-------OuterMethod : org.feinno.icm.cms.TestM.OuterMethod(Test.java:33)
-------main : org.feinno.icm.cms.Test.main(Test.java:11)

 

通过getStackTraceElement 获得的 StackTraceElement数组,其取值的顺序是从Thread.getStackTrace方法开始,每一次调用该方法的

类或者方法输出,就和用eclipse 按ctrl点鼠标向上追踪代码一样的原理。

推荐阅读