首页 > 解决方案 > getStacktrace(),setStackTrace() 有什么用?我不明白这个函数有什么需要?

问题描述

我无法理解这段代码。我很了解语法,但为什么使用getStackTrace()setStackTrace()使用?我的意思是我想知道它在现实世界场景中的实现是什么?即,这段代码的期望输出是什么?

package stackTrace;

class a {
    public void fun() {
        try {
            findexception();

        } catch (Exception e) {
            StackTraceElement[] x = e.getStackTrace();
            System.err.println(x[1].toString());

        }
    }

    public void findexception() throws Exception {
        // int i=0;
        Exception ex = new Exception();
        StackTraceElement[] y = new StackTraceElement[2];

        y[0] = new StackTraceElement("class0", "method0", "type0", 0);
        y[1] = new StackTraceElement("class1", "method1", "type1", 1);

        ex.setStackTrace(y);
        ex.printStackTrace();
        throw ex;

    }
}

public class stackTrace {
    public static void main(String[] args) {
        a obj = new a();
        obj.fun();
    }

}

标签: javaexception-handling

解决方案


其主要想法是自定义有关您的用例的堆栈跟踪(自定义错误处理以及堆栈跟踪中需要的一些额外信息,例如),因为:

Throwable 类的setStackTrace(StackTraceElement[] stackTrace)方法用于将堆栈跟踪元素设置为该可抛出对象,该堆栈跟踪将由getStackTrace()返回并由printStackTrace()和相关方法打印。此方法允许用户覆盖默认堆栈跟踪,该堆栈跟踪要么在构造 throwable 时由fillInStackTrace()生成,要么在从序列化流中读取 throwable 时反序列化。


推荐阅读