亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

newExc.initCause(e); 這句話是什么意思 可有可無么

newExc.initCause(e); ?這句話是什么意思 ?可有可無么

正在回答

5 回答

這是對異常的一種包裝技巧。更底層產生的異常需要上層的代碼來進行處理。一般而言,如果上層的代碼catch到一個異常以后,你想對更上層的結構拋出一個更高級異常來說明。你可以直接在catch語句塊中throw一個新的異常,但是這樣的做法是不被提倡的,因為你這樣會丟失底層產生的異常的信息?,F在假如在你的某段代碼會產生FileNotFoundException,你需要通過一個中間的代碼向上面拋出一個IOException你有這么兩種做法:

try{
????代碼...
}catch(FileNotFoundException?e){
????throw?new?IOException;
}

這是第一種,但是這種做法是不被提倡的,因為他會丟掉原始異常。正確的做法是這樣的:

try{
????代碼...
}catch(FileNotFoundException?e){
????Throable?se?=?new?IOException("error...");
????se.initCause(e);?
????throw?se;
}

initCause()的作用你可以理解成是保存原始的異常,當你想要知道底層發生了什么異常的時候調用getCause()就能夠獲得原始異常。其實這就形成一個異常鏈了,這對于你的代碼是很有幫助的。

13 回復 有任何疑惑可以回復我~
#1

weibo_我不學習沒人愛_0 提問者

非常感謝!
2015-12-01 回復 有任何疑惑可以回復我~
#2

此用戶不存在或被刪除

說的真棒!
2015-12-04 回復 有任何疑惑可以回復我~
#3

慕函數1733451

newexc.initcause怎么在API中找不到呢?
2017-05-01 回復 有任何疑惑可以回復我~

第一種代碼也可以寫成這樣,是不是就考慮一下“不提倡”了呢?代碼如下:

try{

????代碼...

}catch(FileNotFoundException?e){

????throw(IOException)?

? ? new?IOException("error...").initCause(e);

}


0 回復 有任何疑惑可以回復我~

Throable是不是寫錯了


0 回復 有任何疑惑可以回復我~

很好很形象

0 回復 有任何疑惑可以回復我~

您好,我其實想知道,異常鏈是干嘛用的?這個異常鏈很經常用到么?

0 回復 有任何疑惑可以回復我~
#1

qq_老表_1

我覺得應該較為常用,應為我們編寫程序的時候比較固定化思維,都按照我們自己的設計的步驟操作程序,那坑定不會出現問題,但是用戶就不一樣了,打亂操作步驟什么的就會導致異常發生,我們會添加一些自定義的異常來提醒他們這種操作正確,得不到想要的結果。
2016-03-05 回復 有任何疑惑可以回復我~
#2

大腦艾瑞克 回復 qq_老表_1

是的額,這個問題問完了之后,我才意識到有多傻。eclipse這樣的IDE都會自動提示的。挺好的。
2016-03-06 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

newExc.initCause(e); 這句話是什么意思 可有可無么

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號