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方法

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è)工具類)
