十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章給大家介紹java中如何自定義異常打印內(nèi)容,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
創(chuàng)新互聯(lián)于2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術服務公司,擁有項目成都網(wǎng)站設計、成都網(wǎng)站建設網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元科爾沁做網(wǎng)站,已為上家服務,為科爾沁各地企業(yè)和個人服務,聯(lián)系電話:13518219792
1.自定義異常打印內(nèi)容
可以看到,雖然我們使用的是自定義異常,但是當拋出時,還是會打印出堆棧的全部信息。
2.查看源碼
通過查看源碼,我們可以得知,當拋出異常時,程序會調(diào)用此異常的fillInStackTrace方法,但是,大部分異常都沒有對該方法做處理?;臼钦{(diào)用super的方法。
可以看到,此方法的父類實現(xiàn),是在Throwable類中。而且此方法加了synchronized鎖,查看堆棧的信息。那么必然會影響性能。
底層實現(xiàn)是native,調(diào)用C語言的方法。
3.解決方法
①.編寫自定義異常
// 此處為lombok注解@Getter@AllArgsConstructorpublic enum ExceptionEnum { AUTH(1, "認證異常") ; private Integer code; private String msg;}public class AppException extends RuntimeException { public AppException(ExceptionEnum exceptionEnum) { super(exceptionEnum.getMsg()); } // 關鍵 @Override public Throwable fillInStackTrace() { return this; } public static void main(String[] args) { throw new AppException(ExceptionEnum.AUTH); }}
②.重寫fillInStackTrace方法
重寫該方法后,會只打印第一條信息,這樣不僅可以節(jié)省日志空間,方便查看,更可以提高部分性能。
@Override public Throwable fillInStackTrace() { return this; }
③.打印內(nèi)容
可以看到,打印內(nèi)容明顯變少
關于java中如何自定義異常打印內(nèi)容就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。