這篇文章給大家介紹java中如何自定義異常打印內(nèi)容,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
創(chuàng)新互聯(lián)建站專(zhuān)注于涵江網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供涵江營(yíng)銷(xiāo)型網(wǎng)站建設(shè),涵江網(wǎng)站制作、涵江網(wǎng)頁(yè)設(shè)計(jì)、涵江網(wǎng)站官網(wǎng)定制、微信小程序服務(wù),打造涵江網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供涵江網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。1.自定義異常打印內(nèi)容
可以看到,雖然我們使用的是自定義異常,但是當(dāng)拋出時(shí),還是會(huì)打印出堆棧的全部信息。
2.查看源碼
通過(guò)查看源碼,我們可以得知,當(dāng)拋出異常時(shí),程序會(huì)調(diào)用此異常的fillInStackTrace方法,但是,大部分異常都沒(méi)有對(duì)該方法做處理?;臼钦{(diào)用super的方法。
可以看到,此方法的父類(lèi)實(shí)現(xiàn),是在Throwable類(lèi)中。而且此方法加了synchronized鎖,查看堆棧的信息。那么必然會(huì)影響性能。
底層實(shí)現(xiàn)是native,調(diào)用C語(yǔ)言的方法。
3.解決方法
①.編寫(xiě)自定義異常
// 此處為lombok注解@Getter@AllArgsConstructorpublic enum ExceptionEnum { AUTH(1, "認(rèn)證異常") ; private Integer code; private String msg;}public class AppException extends RuntimeException { public AppException(ExceptionEnum exceptionEnum) { super(exceptionEnum.getMsg()); } // 關(guān)鍵 @Override public Throwable fillInStackTrace() { return this; } public static void main(String[] args) { throw new AppException(ExceptionEnum.AUTH); }}
②.重寫(xiě)fillInStackTrace方法
重寫(xiě)該方法后,會(huì)只打印第一條信息,這樣不僅可以節(jié)省日志空間,方便查看,更可以提高部分性能。
@Override public Throwable fillInStackTrace() { return this; }
③.打印內(nèi)容
可以看到,打印內(nèi)容明顯變少
關(guān)于java中如何自定義異常打印內(nèi)容就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。