古詩詞大全網 - 字典詞典 - Throwable的使用

Throwable的使用

使用Throwable壹個很大的好處在於,他能保存他被實例化的方法的堆棧信息,通過方法:

可以將他和他的cause Throwable和他的cause的cause...( 遞歸 ) 的堆棧信息都打印出來。

而例如我們要將壹個Throwable對象的堆棧信息不僅僅是輸出到控制臺,還要保存到本地日誌或者發送到服務器呢?那麽就要將Throwable的堆棧信息提取出來。

令人開心的是, android.util.Log 類提供了這麽壹個工具方法:

通過該方法,可以直接把 Throwable 對象的堆棧信息都拿出來了。

他有4個構造方法。每個構造方法都會調用 fillInStackTrace() 來記錄當前的堆棧信息。

只有兩個參數可選:String類型的message,和他的cause Throwable。

那麽現在來看壹下這兩個變量對Throwable有什麽用,以及對我們來說有什麽意義。

先說結論: detailMessage 和 cause 變量在調用 printStackTrace() 的時候都會被打印出來。

看下 printStackTrace()

看下 toString 是如何包含 message 進來的:

看下打印cause:

可以發現, printEnclosedStackTrace() 方法中又調用了 getCause() 和 printEnclosedStackTrace() ,那麽其實就是壹個遞歸,直到遞歸到最根源的那個cause。

那麽當我們要構造壹個 Throwable 對象的時候,如果上下文中有壹個關聯的 Throwable ,那麽把他作為cause參數來構造新的 Throwable 對象,這樣能更好地記錄問題真正的原因。