第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

initCause(e)方法

?initCause(e)方法的作用是什么

正在回答

2 回答

initCause()這個方法就是對異常來進行包裝的,目的就是為了出了問題的時候能夠追根究底。因為一個項目,越往底層,可能拋出的異常類型會用很多,如果你在上層想要處理這些異常,你就需要挨個的寫很多catch語句塊來捕捉異常,這樣是很麻煩的。如果我們對底層拋出的異常捕獲后,拋出一個新的統(tǒng)一的異常,會避免這個問題。但是直接拋出一個新的異常,會讓最原始的異常信息丟失,這樣不利于排查問題。舉個例子,在底層會出現(xiàn)一個A異常,然后在中間代碼層捕獲A異常,對上層拋出一個B異常。如果在中間代碼層不對A進行包裝,在上層代碼捕捉到B異常后就不知道為什么會導(dǎo)致B異常的發(fā)生,但是包裝以后我們就可以用getCause()方法獲得原始的A異常。這對追查BUG是很有利的。

3 回復(fù) 有任何疑惑可以回復(fù)我~
#1

鄧一格 提問者

謝謝老哥,解釋得非常細
2017-09-06 回復(fù) 有任何疑惑可以回復(fù)我~

這是對異常的一種包裝。因為在catch語句塊中throw一個新的異常時會丟失底層產(chǎn)生的異常的信息,所以直接在catch中拋出異常是不被提倡的。

try{

test1();

}catch(DrunkException?e){

????RuntimeException newExc=?new?RuntimeException();

? ? newExc.initCause(e);?

????throw?newExc;

}?

而包裝成一個新異常后,調(diào)用initCause()方法,再將其拋出給更上一層的調(diào)用者處理,它的作用你相當(dāng)于保存了原始的異常信息。其實這相當(dāng)于形成一個異常鏈,可以很清楚地顯示出原始的異常出處。否則可能會丟失原始的異常信息。


2 回復(fù) 有任何疑惑可以回復(fù)我~
#1

鄧一格 提問者

謝謝老哥
2017-09-06 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消

initCause(e)方法

我要回答 關(guān)注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號