我无法理解此代码。.我非常了解语法,但是为什么使用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();
}
}
答案 0 :(得分:0)
主要目的是针对您的用例自定义堆栈跟踪(自定义错误处理,例如,在堆栈跟踪中需要一些额外的信息),因为:
Throwable类的 setStackTrace(StackTraceElement [] stackTrace)方法用于将堆栈跟踪元素设置为此可抛出对象,并且该堆栈跟踪将由 getStackTrace()返回> strong>,并通过 printStackTrace()和相关方法进行打印。 此方法允许用户重写由 fillInStackTrace()生成的默认堆栈跟踪,该默认跟踪在构造throwable时生成,或者在从序列化流中读取throwable时反序列化。