浅析java异常栈

 更新时间:2017年12月12日 08:47:03   作者:lyn_  
给大家通过一个简单的代码实例给大家分型了java异常栈问题,需要的朋友参考一下吧。

我们给大家通过实例代码分析了java异常栈的函数用法并在下面给大家整理了Java获取异常堆栈信息的两种方法,以下是全部内容:

(stack trace)异常栈轨迹是指:

当throw Throwable 时,Throwable对象抛出过程(穿梭)所经历的多个方法调用层(方法调用栈)。越接近 throw 语句的方法先进入异常栈。

(Throwable Causal Chain)异常原因链:

在Throwable类中的cause属性,表示被当前异常包装的原始异常。(可以称为异常原因)

在打印异常栈轨迹时,会递归打印 原始异常的异常栈。

现在来分析一下 Throwable.printStackTrace() 方法。

在Throwable.printStackTrace(PrintStreamOrWriter s) 内部,我们可以看到:

在打印异常栈时,是先打印 当前异常对象this的异常栈。

然后再打印 异常原因链。(递归打印 原始异常的异常栈)

synchronized (s.lock()) {
   // Print our stack trace
// 1. 先打印 当前异常对象this的 异常栈。
   s.println(this);
   StackTraceElement[] trace = getOurStackTrace();
   for (StackTraceElement traceElement : trace)
    s.println("\tat " + traceElement);

   // Print suppressed exceptions, if any
   for (Throwable se : getSuppressed())
    se.printEnclosedStackTrace(s, trace, SUPPRESSED_CAPTION, "\t", dejaVu);
   // Print cause, if any
// 2. 打印 异常原因链
   Throwable ourCause = getCause();
   if (ourCause != null)
    ourCause.printEnclosedStackTrace(s, trace, CAUSE_CAPTION, "", dejaVu);
  }

Java获取异常堆栈信息

方法一:

public static String getStackTrace(Throwable t) {
  StringWriter sw = new StringWriter();
  PrintWriter pw = new PrintWriter(sw);
  try {
    t.printStackTrace(pw);
    return sw.toString();
  } finally {
    pw.close();
  }
}

方法二:

org.apache.commons.lang3.exception.ExceptionUtils.getStackTrace(e);

相关文章

  • Feign调用传输文件异常的解决

    Feign调用传输文件异常的解决

    这篇文章主要介绍了Feign调用传输文件异常的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 一篇文章带你了解SpringBoot Web开发

    一篇文章带你了解SpringBoot Web开发

    这篇文章主要介绍了使用Spring Boot搭建Java web项目及开发过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • Java中关于String的两种赋值方式

    Java中关于String的两种赋值方式

    这篇文章主要介绍了Java中关于String的两种赋值方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 一文学透ApplicationContext继承接口功能及与BeanFactory区别

    一文学透ApplicationContext继承接口功能及与BeanFactory区别

    这篇文章主要为大家介绍了ApplicationContext继承接口功能及与BeanFactory区别示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Java使用Apache POI库读取Excel表格文档的示例

    Java使用Apache POI库读取Excel表格文档的示例

    POI库是Apache提供的用于在Windows下读写各类微软Office文档的Java库,这里我们就来看一下Java使用Apache POI库读取Excel表格文档的示例:
    2016-06-06
  • 基于SpringBoot的SSMP的整合案例

    基于SpringBoot的SSMP的整合案例

    这篇文章主要介绍了SpringBoot整合SSMP的详细教程,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-05-05
  • java中的转义字符介绍

    java中的转义字符介绍

    普通的转义字符序列和八进制转义字符都比Unicode转义字符要好得多,因为与Unicode转义字符不同,转义字符序列是在程序被解析为各种符号之后被处理的
    2013-09-09
  • SpringBoot通过@MatrixVariable进行传参详解

    SpringBoot通过@MatrixVariable进行传参详解

    这篇文章主要介绍了SpringBoot使用@MatrixVariable传参,文章围绕@MatrixVariable展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-06-06
  • Java对中文进行排序的实现示例

    Java对中文进行排序的实现示例

    工作中,我们经常会遇到需要进行各种排序的需求,本文主要介绍了Java对中文进行排序的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • java设计模式之模板方法模式详解

    java设计模式之模板方法模式详解

    这篇文章主要为大家详细介绍了java设计模式之模板方法模式的相关资料,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06

最新评论