资讯专栏INFORMATION COLUMN

简单看java异常栈

chanthuang / 1917人阅读

摘要:异常栈轨迹是指当时,对象抛出过程穿梭所经历的多个方法调用层方法调用栈。越接近语句的方法先进入异常栈。异常原因链在类中的属性,表示被当前异常包装的原始异常。可以称为异常原因在打印异常栈轨迹时,会递归打印原始异常的异常栈。现在来分析一下方法。

(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("	at " + traceElement);

            // Print suppressed exceptions, if any
            for (Throwable se : getSuppressed())
                se.printEnclosedStackTrace(s, trace, SUPPRESSED_CAPTION, "	", dejaVu);

            // Print cause, if any
//  2. 打印 异常原因链
            Throwable ourCause = getCause();
            if (ourCause != null)
                ourCause.printEnclosedStackTrace(s, trace, CAUSE_CAPTION, "", dejaVu);
        }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70772.html

相关文章

  • java异常那些事

    摘要:一抛出异常发现错误异常也是对象使用使用异常机制来报告错误。异常也是普通的类类型。异常声明中的语句执行完成后会继续执行后的其他语句。非检查异常抛出到上一级时可以不用进行声明合理的使用非检查异常可以简化代码。 为什么需要异常机制: Java的基本理念是结构不佳的代码不能运行 --- Java编程思想 最理想的是在编译时期就发现错误,但一些错误要在运行时才会暴露出来。对于这些错误我们当然不能...

    Kyxy 评论0 收藏0
  • JVM运行时数据区域

    摘要:虚拟机在执行程序的过程中会把它所管理的内存划分为若干个不同的数据区域,本篇文章将会对这些数据区域进行简略的介绍。运行时常量池运行时常量池是方法区的一部分。直接内存直接内存不是虚拟机运行时数据区的一部分,不是虚拟机规范中定义的内存区域。 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,本篇文章将会对这些数据区域进行简略的介绍。JVM所管理的内存包括的...

    meislzhua 评论0 收藏0
  • 聊聊Java异常机制及实现

    摘要:是那些可能在虚拟机正常运行期间抛出的异常的超类。运行时异常定义及其子类都被称为运行时异常。对于语言中的关键字和,虚拟机中并没有特殊的字节码指令去支持它们,都是通过编译器生成字节码片段以及不同的异常处理器来实现。 前言 在一些传统的编程语言,如C语言中,并没有专门处理异常的机制,程序员通常用方法的特定返回值来表示异常情况,并且程序的正常流程和异常流程都采用同样的流程控制语句。Java语言...

    Towers 评论0 收藏0
  • 《深入理解Java虚拟机》(二)Java虚拟机运行时数据区

    摘要:虚拟机运行时数据区分为以下几个部分。程序计数器也是在虚拟机规范中唯一没有规定任何异常情况的区域。在方法运行期间不会改变局部变量表的大小。长度在位和位的虚拟机中,分别为官方称它为。 Java虚拟机运行时数据区 详解 2.1 概述 本文参考的是周志明的 《深入理解Java虚拟机》第二章 ,为了整理思路,简单记录一下,方便后期查阅。 2.2 运行时数据区域 Java虚拟机在Java程序运行时...

    draveness 评论0 收藏0
  • “崩溃了?不可能,我全 Catch 住了” | Java 异常处理

    摘要:允许存在多个,用于针对不同的异常做不同的处理。表示程序可能需要捕获并且处理的异常。因此,我们应该尽可能的避免通过异常来处理正常的逻辑检查,这样可以确保不会因为发生异常而导致性能问题。异常表中的每一条记录,都代表了一个异常处理器。 showImg(https://segmentfault.com/img/remote/1460000017918154?w=640&h=100); show...

    stdying 评论0 收藏0

发表评论

0条评论

chanthuang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<