阿里java開發(fā)手冊(cè),關(guān)于異常處理

1強(qiáng)制、java類庫中定義的可以通過預(yù)檢查方式規(guī)避的運(yùn)行時(shí)異常不應(yīng)該通過catch的方式處理,比如空指針,數(shù)組越界等等。

正例:if(null != obj)

反例:try catch 空指針

下面的例子,無法通過預(yù)檢查的異常除外(預(yù)檢查就是編譯時(shí)必須捕獲的異常)

2強(qiáng)制、異常不要用來做流程控制、條件控制。

異常設(shè)計(jì)的初衷是解決程序運(yùn)行中的各種意外情況。且異常的處理效率比比條件判斷方式低得多。

3強(qiáng)制、catch時(shí)請(qǐng)分清穩(wěn)定代碼和非穩(wěn)定代碼,穩(wěn)定代碼指的是無論如何不會(huì)出錯(cuò)的代碼。

對(duì)于非穩(wěn)定代碼的catch盡可能進(jìn)行區(qū)分異常類型,再做對(duì)應(yīng)的異常處理。

說明:對(duì)大段代碼進(jìn)行try-catch,使程序無法根據(jù)不同的異常做出正確的應(yīng)激反應(yīng),也不利于定位問題,這是一種不負(fù)責(zé)任的表現(xiàn)。

正例:用戶注冊(cè)的場(chǎng)景中,如果用戶輸入非法字符,或用戶名稱已存在,或用戶輸入密碼過于簡(jiǎn)單,在程序上做出分門別類的判斷,并提示給用戶。

4強(qiáng)制、捕獲異常是為了處理它,不要捕獲了卻什么都不處理而拋棄之,如果不想處理它,請(qǐng)將該異常拋給它的調(diào)用者。最外層的業(yè)務(wù)使用者,必須處理異常,將其轉(zhuǎn)化為用戶可以理解的內(nèi)容。

5強(qiáng)制、有try塊放到了事務(wù)代碼中,catch異常后,如果需要回滾事務(wù),一定要注意手動(dòng)回滾事務(wù)

6強(qiáng)制、finally塊必須對(duì)資源對(duì)象、流對(duì)象進(jìn)行關(guān)閉,有異常也要做try-catch。

說明:如果jdk1.7及以上,可以使用try-with-resources方法


這樣就相當(dāng)于加了一個(gè)finally,并且finally中代碼為:in.close()

7強(qiáng)制、不要在finally塊中使用return。

說明:finally塊中的return返回后方法結(jié)束執(zhí)行,不會(huì)再執(zhí)行try塊中的return語句

8強(qiáng)制、捕獲異常與拋異常,必須是完全匹配,或者捕獲異常是拋異常的父類

說明:如果與其對(duì)方拋的是繡球,實(shí)際接到的是鉛球,就會(huì)產(chǎn)生意外情況

9推薦、方法的返回值可以為null,不強(qiáng)制返回空集合,或者空對(duì)象等,必須添加注釋充分說明什么情況下會(huì)返回null值。

10、空指針出現(xiàn)的場(chǎng)景

11推薦、不允許拋出Exception

12、開放接口的返回信息

13、(大概就是重復(fù)代碼,比如建一個(gè)工具類)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容