Java获取并打印当前堆栈的方法

原理

我们在最初接触异常的时候,就会 try…catch… 语句:

try {
    //可能导致异常的操作
} catch (Exception e) {
    e.printStackTrace();
}

当然这种 CatchAll 的做法不是很好,但确实打印了异常栈。
程序因异常而中断,却不能够得到处理,只能抛出异常,按“要求”打印异常栈。

我们也知道 Throwable 是 Exception 的基类,所以参考异常栈打印的原理,使用Throwable对象获取当前的程序运行堆栈,获取的对象是StackTraceElement类型的一个数组,也就是一个一个的StackTraceElement对象。

然后做一下判空,就可以遍历并打印了。

编程实现与测试

public class CallStack {

    private static void printCallStack() {
        Throwable exception = new Throwable();
        StackTraceElement[] stackTraceElements = exception.getStackTrace();
        if (stackTraceElements != null) {
            for (StackTraceElement element : stackTraceElements) {
                System.out.println(element.getClassName() + "/t" +element.getFileName() + "/t" + element.getLineNumber()
                        + "/t" +element.getMethodName());
                System.out.println("-----------------------------------");
            }
        }
    }

    public static void main(String[] args) {
        printCallStack();
    }
    
}

运行结果

将程序放在D盘根目录下,用cmd运行:
在这里插入图片描述

发布了578 篇原创文章 · 获赞 1188 · 访问量 40万+

猜你喜欢

转载自blog.csdn.net/weixin_43896318/article/details/104504833