淺析java異常棧
我們給大家通過實(shí)例代碼分析了java異常棧的函數(shù)用法并在下面給大家整理了Java獲取異常堆棧信息的兩種方法,以下是全部?jī)?nèi)容:
(stack trace)異常棧軌跡是指:
當(dāng)throw Throwable 時(shí),Throwable對(duì)象拋出過程(穿梭)所經(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("\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);
相關(guān)文章
一文學(xué)透ApplicationContext繼承接口功能及與BeanFactory區(qū)別
這篇文章主要為大家介紹了ApplicationContext繼承接口功能及與BeanFactory區(qū)別示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04
Java使用Apache POI庫(kù)讀取Excel表格文檔的示例
POI庫(kù)是Apache提供的用于在Windows下讀寫各類微軟Office文檔的Java庫(kù),這里我們就來(lái)看一下Java使用Apache POI庫(kù)讀取Excel表格文檔的示例:2016-06-06
SpringBoot通過@MatrixVariable進(jìn)行傳參詳解
這篇文章主要介紹了SpringBoot使用@MatrixVariable傳參,文章圍繞@MatrixVariable展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06
Java對(duì)中文進(jìn)行排序的實(shí)現(xiàn)示例
工作中,我們經(jīng)常會(huì)遇到需要進(jìn)行各種排序的需求,本文主要介紹了Java對(duì)中文進(jìn)行排序的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02

