原理
我们在最初接触异常的时候,就会 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运行: