為什么要調(diào)用initCause?
RuntimeException newrun=new RuntimeException("司機(jī)一滴酒");
? ?newrun.initCause(e);
? ?throw newrun;
為什么要調(diào)用initCause?
RuntimeException newrun=new RuntimeException("司機(jī)一滴酒");
? ?newrun.initCause(e);
? ?throw newrun;
為什么要調(diào)用initCause?
2017-03-27
舉報(bào)
2017-03-27
initCause()這個(gè)方法就是對(duì)異常來進(jìn)行包裝的,目的就是為了出了問題的時(shí)候能夠追根究底。因?yàn)橐粋€(gè)項(xiàng)目,越往底層,可能拋出的異常類型會(huì)用很多,如果你在上層想要處理這些異常,你就需要挨個(gè)的寫很多catch語(yǔ)句塊來捕捉異常,這樣是很麻煩的。如果我們對(duì)底層拋出的異常捕獲后,拋出一個(gè)新的統(tǒng)一的異常,會(huì)避免這個(gè)問題。但是直接拋出一個(gè)新的異常,會(huì)讓最原始的異常信息丟失,這樣不利于排查問題。舉個(gè)例子,在底層會(huì)出現(xiàn)一個(gè)A異常,然后在中間代碼層捕獲A異常,對(duì)上層拋出一個(gè)B異常。如果在中間代碼層不對(duì)A進(jìn)行包裝,在上層代碼捕捉到B異常后就不知道為什么會(huì)導(dǎo)致B異常的發(fā)生,但是包裝以后我們就可以用getCause()方法獲得原始的A異常。這對(duì)追查BUG是很有利的。
轉(zhuǎn)載的,希望有用!