成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

簡(jiǎn)單看java異常棧

chanthuang / 2017人閱讀

摘要:異常棧軌跡是指當(dāng)時(shí),對(duì)象拋出過(guò)程穿梭所經(jīng)歷的多個(gè)方法調(diào)用層方法調(diào)用棧。越接近語(yǔ)句的方法先進(jìn)入異常棧。異常原因鏈在類中的屬性,表示被當(dāng)前異常包裝的原始異常。可以稱為異常原因在打印異常棧軌跡時(shí),會(huì)遞歸打印原始異常的異常棧?,F(xiàn)在來(lái)分析一下方法。

(stack trace)異常棧軌跡是指:
當(dāng) throw Throwable 時(shí), Throwable對(duì)象拋出過(guò)程(穿梭)所經(jīng)歷的多個(gè)方法調(diào)用層(方法調(diào)用棧)。越接近 throw 語(yǔ)句的方法先進(jìn)入異常棧。

(Throwable Causal Chain)異常原因鏈:
在Throwable類中的cause屬性,表示被當(dāng)前異常包裝的原始異常。(可以稱為異常原因)
在打印異常棧軌跡時(shí),會(huì)遞歸打印 原始異常的異常棧。

現(xiàn)在來(lái)分析一下 Throwable.printStackTrace() 方法。

Throwable.printStackTrace(PrintStreamOrWriter s) 內(nèi)部,我們可以看到:
在打印異常棧時(shí),是

先打印 當(dāng)前異常對(duì)象this的 異常棧。

然后再打印 異常原因鏈。(遞歸打印 原始異常的異常棧)

synchronized (s.lock()) {
            // Print our stack trace
// 1. 先打印 當(dāng)前異常對(duì)象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);
        }

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/70772.html

相關(guān)文章

  • java異常那些事

    摘要:一拋出異常發(fā)現(xiàn)錯(cuò)誤異常也是對(duì)象使用使用異常機(jī)制來(lái)報(bào)告錯(cuò)誤。異常也是普通的類類型。異常聲明中的語(yǔ)句執(zhí)行完成后會(huì)繼續(xù)執(zhí)行后的其他語(yǔ)句。非檢查異常拋出到上一級(jí)時(shí)可以不用進(jìn)行聲明合理的使用非檢查異??梢院?jiǎn)化代碼。 為什么需要異常機(jī)制: Java的基本理念是結(jié)構(gòu)不佳的代碼不能運(yùn)行 --- Java編程思想 最理想的是在編譯時(shí)期就發(fā)現(xiàn)錯(cuò)誤,但一些錯(cuò)誤要在運(yùn)行時(shí)才會(huì)暴露出來(lái)。對(duì)于這些錯(cuò)誤我們當(dāng)然不能...

    Kyxy 評(píng)論0 收藏0
  • JVM運(yùn)行時(shí)數(shù)據(jù)區(qū)域

    摘要:虛擬機(jī)在執(zhí)行程序的過(guò)程中會(huì)把它所管理的內(nèi)存劃分為若干個(gè)不同的數(shù)據(jù)區(qū)域,本篇文章將會(huì)對(duì)這些數(shù)據(jù)區(qū)域進(jìn)行簡(jiǎn)略的介紹。運(yùn)行時(shí)常量池運(yùn)行時(shí)常量池是方法區(qū)的一部分。直接內(nèi)存直接內(nèi)存不是虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)的一部分,不是虛擬機(jī)規(guī)范中定義的內(nèi)存區(qū)域。 Java虛擬機(jī)在執(zhí)行Java程序的過(guò)程中會(huì)把它所管理的內(nèi)存劃分為若干個(gè)不同的數(shù)據(jù)區(qū)域,本篇文章將會(huì)對(duì)這些數(shù)據(jù)區(qū)域進(jìn)行簡(jiǎn)略的介紹。JVM所管理的內(nèi)存包括的...

    meislzhua 評(píng)論0 收藏0
  • 聊聊Java異常機(jī)制及實(shí)現(xiàn)

    摘要:是那些可能在虛擬機(jī)正常運(yùn)行期間拋出的異常的超類。運(yùn)行時(shí)異常定義及其子類都被稱為運(yùn)行時(shí)異常。對(duì)于語(yǔ)言中的關(guān)鍵字和,虛擬機(jī)中并沒(méi)有特殊的字節(jié)碼指令去支持它們,都是通過(guò)編譯器生成字節(jié)碼片段以及不同的異常處理器來(lái)實(shí)現(xiàn)。 前言 在一些傳統(tǒng)的編程語(yǔ)言,如C語(yǔ)言中,并沒(méi)有專門(mén)處理異常的機(jī)制,程序員通常用方法的特定返回值來(lái)表示異常情況,并且程序的正常流程和異常流程都采用同樣的流程控制語(yǔ)句。Java語(yǔ)言...

    Towers 評(píng)論0 收藏0
  • 《深入理解Java虛擬機(jī)》(二)Java虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)

    摘要:虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū)分為以下幾個(gè)部分。程序計(jì)數(shù)器也是在虛擬機(jī)規(guī)范中唯一沒(méi)有規(guī)定任何異常情況的區(qū)域。在方法運(yùn)行期間不會(huì)改變局部變量表的大小。長(zhǎng)度在位和位的虛擬機(jī)中,分別為官方稱它為。 Java虛擬機(jī)運(yùn)行時(shí)數(shù)據(jù)區(qū) 詳解 2.1 概述 本文參考的是周志明的 《深入理解Java虛擬機(jī)》第二章 ,為了整理思路,簡(jiǎn)單記錄一下,方便后期查閱。 2.2 運(yùn)行時(shí)數(shù)據(jù)區(qū)域 Java虛擬機(jī)在Java程序運(yùn)行時(shí)...

    draveness 評(píng)論0 收藏0
  • “崩潰了?不可能,我全 Catch 住了” | Java 異常處理

    摘要:允許存在多個(gè),用于針對(duì)不同的異常做不同的處理。表示程序可能需要捕獲并且處理的異常。因此,我們應(yīng)該盡可能的避免通過(guò)異常來(lái)處理正常的邏輯檢查,這樣可以確保不會(huì)因?yàn)榘l(fā)生異常而導(dǎo)致性能問(wèn)題。異常表中的每一條記錄,都代表了一個(gè)異常處理器。 showImg(https://segmentfault.com/img/remote/1460000017918154?w=640&h=100); show...

    stdying 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<