java - 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();
}
}
解决方案
其主要想法是自定义有关您的用例的堆栈跟踪(自定义错误处理以及堆栈跟踪中需要的一些额外信息,例如),因为:
Throwable 类的setStackTrace(StackTraceElement[] stackTrace)方法用于将堆栈跟踪元素设置为该可抛出对象,该堆栈跟踪将由getStackTrace()返回并由printStackTrace()和相关方法打印。此方法允许用户覆盖默认堆栈跟踪,该堆栈跟踪要么在构造 throwable 时由fillInStackTrace()生成,要么在从序列化流中读取 throwable 时反序列化。
推荐阅读
- python - 无法从末尾匹配字符串
- flutter - 如何在循环中进行 http 调用以在 dart flutter 中同步?
- oracle - 如何在主 RANGE 分区中自动创建 LIST 子分区
- c# - 如何在asp.net mvc 5中使用局部视图进行分页
- c# - 从 IEnumerable 获取所有组中所有分组项的计数
> 分组依据 - javascript - Jquery日期选择器设置日期问题
- corda - Corda 中的数据安全性
- asp.net-mvc - 在 ASP.NET MVC iis 中获取客户端的 IP 地址
- spring-boot - oauth2 登录:显示未授权 - 无法生成 access_token
- wordpress - Wordpress 找不到 Docker 中托管的数据库