https://segmentfault.com/a/1190000012262244
代理對象的代理方法執(zhí)行時對異常的處理方式:
異常處理的邏輯是,對RuntimeException、接口已聲明的異常、Error直接拋出,其他異常被包裝成UndeclaredThrowableException拋出。
而如果代理方法調(diào)用了被代理對象的原方法,是通過反射調(diào)用的method.invoke(args)。此時目標方法拋出的異常會被invoke方法的InvocationTargetException異常包裝。而InvocationTargetException又會被UndeclaredThrowableException異常包裝。所以如果目標方法拋出了一個聲明的受檢異常,最中打印出的堆棧是:UndeclaredThrowableException - InvocationTargetException - CheckedException, 而不是期望的CheckedException。
所以log在打印異常時直接打印e,而不要e.getMessage(),否則日志看不出來
代理與異常筆記
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 第一章:Java程序設(shè)計概述 Java和C++最大的不同在于Java采用的指針模型可以消除重寫內(nèi)存和損壞數(shù)據(jù)的可能...
- 引言 在程序運行過程中(注意是運行階段,程序可以通過編譯),如果JVM檢測出一個不可能執(zhí)行的操作,就會出現(xiàn)運行時錯...
- 寫著寫著發(fā)現(xiàn)簡書提醒我文章接近字數(shù)極限,建議我換一篇寫了。 建議52:推薦使用String直接量賦值 一般對象都是...