課程
/后端開(kāi)發(fā)
/Java
/Java入門第三季
bookNotExists.initCause(e);請(qǐng)問(wèn)這句代碼起什么作用?。?/p>
2015-12-20
源自:Java入門第三季 1-9
正在回答
字?jǐn)?shù)太多,發(fā)到這里。
不是為了實(shí)現(xiàn)哪一句代碼的。initCause()這個(gè)方法就是對(duì)異常來(lái)進(jìn)行包裝的,目的就是為了出了問(wèn)題的時(shí)候能夠追根究底。因?yàn)橐粋€(gè)項(xiàng)目,越往底層,可能拋出的異常類型會(huì)用很多,如果你在上層想要處理這些異常,你就需要挨個(gè)的寫很多catch語(yǔ)句塊來(lái)捕捉異常,這樣是很麻煩的。如果我們對(duì)底層拋出的異常捕獲后,拋出一個(gè)新的統(tǒng)一的異常,會(huì)避免這個(gè)問(wèn)題。但是直接拋出一個(gè)新的異常,會(huì)讓最原始的異常信息丟失,這樣不利于排查問(wèn)題。舉個(gè)例子,在底層會(huì)出現(xiàn)一個(gè)A異常,然后在中間代碼層捕獲A異常,對(duì)上層拋出一個(gè)B異常。如果在中間代碼層不對(duì)A進(jìn)行包裝,在上層代碼捕捉到B異常后就不知道為什么會(huì)導(dǎo)致B異常的發(fā)生,但是包裝以后我們就可以用getCause()方法獲得原始的A異常。這對(duì)追查BUG是很有利的。
class?A{ ????try{ ????????... ????}catch(AException?a){ ?????throw?new?BException(); ????} } ... class?B{ ????try{ ????????... ????}catch(BException?b){ ????????//這時(shí)候你需要去看b異常式什么問(wèn)題導(dǎo)致的,你在A類里面 ????????//沒(méi)有對(duì)AException進(jìn)行包裝,所以你無(wú)法知道是A導(dǎo)致的B ????} }
如果包裝以后:
class?A{ ????try{ ????????... ????}catch(AException?a){ ????????BException?b?=?new?BEexception(); ????????b.initCause(a); ????????throw?b; ????} } ... class?B{ ????try{ ????????... ????}catch(BException?b){ ????????//什么導(dǎo)致了b呢? ????????b.getCause();//得到導(dǎo)致B異常的原始異常 ????} }
這樣看應(yīng)該很明白了吧。
天涯蝶舞 提問(wèn)者
不甘于現(xiàn)實(shí)
player007
沒(méi)名堂的我
b.getCause();得到的原始異常是指包裝前的異常嗎?
多少明白了一些!
牛叉,有解釋有代碼好贊
我之前回答過(guò)這個(gè)問(wèn)題,你可以去看看
newExc.initCause(e); 這句話是什么意思 可有可無(wú)么
舉報(bào)
Java中你必須懂得常用技能,不容錯(cuò)過(guò)的精彩,快來(lái)加入吧
1 回答newExc.initCause(e); initCause是什么意思?用來(lái)干嘛的
2 回答bookNotExists.initCause(e);什么作用
2 回答initCause(e)方法
2 回答為什么突然出現(xiàn)一個(gè)initCause(e)
6 回答第一章作業(yè)參考中的這句是什么意思,有什么作用???
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2015-12-20
字?jǐn)?shù)太多,發(fā)到這里。
不是為了實(shí)現(xiàn)哪一句代碼的。initCause()這個(gè)方法就是對(duì)異常來(lái)進(jìn)行包裝的,目的就是為了出了問(wèn)題的時(shí)候能夠追根究底。因?yàn)橐粋€(gè)項(xiàng)目,越往底層,可能拋出的異常類型會(huì)用很多,如果你在上層想要處理這些異常,你就需要挨個(gè)的寫很多catch語(yǔ)句塊來(lái)捕捉異常,這樣是很麻煩的。如果我們對(duì)底層拋出的異常捕獲后,拋出一個(gè)新的統(tǒng)一的異常,會(huì)避免這個(gè)問(wèn)題。但是直接拋出一個(gè)新的異常,會(huì)讓最原始的異常信息丟失,這樣不利于排查問(wèn)題。舉個(gè)例子,在底層會(huì)出現(xiàn)一個(gè)A異常,然后在中間代碼層捕獲A異常,對(duì)上層拋出一個(gè)B異常。如果在中間代碼層不對(duì)A進(jìn)行包裝,在上層代碼捕捉到B異常后就不知道為什么會(huì)導(dǎo)致B異常的發(fā)生,但是包裝以后我們就可以用getCause()方法獲得原始的A異常。這對(duì)追查BUG是很有利的。
class?A{ ????try{ ????????... ????}catch(AException?a){ ?????throw?new?BException(); ????} } ... class?B{ ????try{ ????????... ????}catch(BException?b){ ????????//這時(shí)候你需要去看b異常式什么問(wèn)題導(dǎo)致的,你在A類里面 ????????//沒(méi)有對(duì)AException進(jìn)行包裝,所以你無(wú)法知道是A導(dǎo)致的B ????} }如果包裝以后:
class?A{ ????try{ ????????... ????}catch(AException?a){ ????????BException?b?=?new?BEexception(); ????????b.initCause(a); ????????throw?b; ????} } ... class?B{ ????try{ ????????... ????}catch(BException?b){ ????????//什么導(dǎo)致了b呢? ????????b.getCause();//得到導(dǎo)致B異常的原始異常 ????} }這樣看應(yīng)該很明白了吧。
2018-08-29
b.getCause();得到的原始異常是指包裝前的異常嗎?
2017-02-21
多少明白了一些!
2016-08-31
牛叉,有解釋有代碼好贊
2015-12-20
我之前回答過(guò)這個(gè)問(wèn)題,你可以去看看
newExc.initCause(e); 這句話是什么意思 可有可無(wú)么