getStacktrace(),setStackTrace()有什么用?我无法理解此功能的需要吗?

时间:2019-01-18 09:30:36

标签: java exception-handling

我无法理解此代码。.我非常了解语法,但是为什么使用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();
    }

}

1 个答案:

答案 0 :(得分:0)

主要目的是针对您的用例自定义堆栈跟踪(自定义错误处理,例如,在堆栈跟踪中需要一些额外的信息),因为:

Throwable类的 setStackTrace(StackTraceElement [] stackTrace)方法用于将堆栈跟踪元素设置为此可抛出对象,并且该堆栈跟踪将由 getStackTrace() strong>,并通过 printStackTrace()和相关方法进行打印。    此方法允许用户重写由 fillInStackTrace()生成的默认堆栈跟踪,该默认跟踪在构造throwable时生成,或者在从序列化流中读取throwable时反序列化。