一、注釋
1. 項目
項目建議提供注釋,說明項目的作用,核心邏輯或需要注意的特別事項,方便其他人快速對項目形成整體了解。添加方式有兩種:
- 在根目錄下創(chuàng)建README.md或README.txt
- 在根目錄下創(chuàng)建doc文件夾,在其創(chuàng)建README.md或README.txt,還可以在該目錄下存儲一些初始化語句、索引創(chuàng)建語句等內(nèi)容
2. 包
說明該包的核心作用,注釋可在package-info.java內(nèi)設(shè)置,建議在核心包上有選擇添加。
3. 類
所有類都需要添加注釋,類注釋采用javadoc規(guī)范的方式( /** */ ),注釋包括:該類的主要作用及使用時的一些注意事項、創(chuàng)建者和創(chuàng)建日期,可通過codetemplate來統(tǒng)一格式。
4. 類方法
類方法注釋采用javadoc規(guī)范的方式( /** */ ),注釋包括:該方法的作用、使用注意事項、參數(shù)、返回值、拋出異常信息,可通過codetemplate來統(tǒng)一格式,添加注釋時可以模仿jdk內(nèi)方法的注釋。
如果注釋的工作量太大,對于私有方法,可以簡化注釋,做到能清晰說明其作用即可。但是所有的抽象方法(包括接口中的方法)的注釋必須嚴(yán)格的按照javadoc規(guī)范進(jìn)行添加,需要額外指出對子類的實現(xiàn)要求,或者調(diào)用注意事項。
當(dāng)然也會有例外情況,如controller內(nèi)使用swagger2提供在線文檔,那就沒必要再提供javadoc注釋了。
5. 類屬性
所有的類屬性都需要添加注釋,所有可用通過類名.屬性、對象實例.屬性調(diào)用的類屬性都應(yīng)該使用javadoc進(jìn)行注釋,如常量、枚舉類型字段;POJO類的屬性個人感覺使用行內(nèi)注釋會更合適一些,普通實例變量建議使用javadoc方式。
6. 方法內(nèi)
方法內(nèi)部單行注釋,在被注釋語句上方另起一行,使用//注釋。方法內(nèi)部多行注釋使用/* */注釋,注意與代碼對齊。
可以這樣記憶// 和 /* */只在方法內(nèi)部和POJO內(nèi)使用,其他時候都使用javadoc方式的注釋。
7. 其他建議
- 注釋使用中文,專有名詞與關(guān)鍵字保持英文原文即可。
- 代碼修改的同時,注釋也要進(jìn)行相應(yīng)的修改。
- 如果一段代碼需要注釋掉,在上方詳細(xì)說明;如果代碼已無用,直接刪除更好。
- TODO(待辦事宜),F(xiàn)IXME(錯誤,不能工作)這類特殊注釋標(biāo)記,添加時留下添加人、時間、預(yù)計處理時間,并及時處理,不要寫了就不管了。
對于注釋的要求:第一、能夠準(zhǔn)確反應(yīng)設(shè)計思想和代碼邏輯;第二、能夠描述業(yè)務(wù)含義,使別的程序員能夠迅速了解到代碼背后的信息。完全沒有注釋的大段代碼對于閱讀者形同天書,注釋是給自己看的,即使隔很長時間,也能清晰理解當(dāng)時的思路;注釋也是給繼任者看的,使其能夠快速接替自己的工作。
額外的,好的命名、代碼結(jié)構(gòu)是自解釋的,注釋力求精簡準(zhǔn)確、表達(dá)到位。避免出現(xiàn)注釋的一個極端:過多過濫的注釋,代碼的邏輯一旦修改,修改注釋是相當(dāng)大的負(fù)擔(dān)。
二、異常處理
主要涉及什么情況下添加異常處理,捕獲異常后的處理方式,finally內(nèi)注意事項及其它幾點建議。
1. 異常捕獲
- 不要捕獲IndexOutOfBoundsException、NullPointerException等運行時異常,這類異??梢酝ㄟ^條件判斷避免;也不要使用異常來做流程控制,異常的處理效率比條件分支低;
- 不要對大段代碼進(jìn)行try-catch,只在可能發(fā)生異常且需要對異常處理的場景有針對性的進(jìn)行try-catch捕獲異常;
2. 異常處理
- 捕獲異常后嚴(yán)禁什么也不做或者直接e.printStackTrace()輸出信息至控制臺;如果不想處理,將該異常拋給上層,最外層的業(yè)務(wù)使用者,必須處理異常,將其轉(zhuǎn)化為用戶可以理解的內(nèi)容;
- 在代碼中使用“拋異常”還是“返回錯誤碼”,對于公司外的 http/api 開放接口必須 使用“錯誤碼”;而應(yīng)用內(nèi)部推薦異常拋出;跨應(yīng)用間 RPC 調(diào)用優(yōu)先考慮使用 Result 方式,封 裝 isSuccess()方法、“錯誤碼”、“錯誤簡短信息”。
- 定義時區(qū)分unchecked/checked 異常,避免直接拋出newRuntimeException(), 更不允許拋出 Exception 或者 Throwable,應(yīng)使用有業(yè)務(wù)含義的自定義異常。
3. finally使用
- 在finally塊中進(jìn)行資源回收(關(guān)閉資源對象、流對象)時,有異常也要做try-catch
- finally塊中不能使用return,finally塊中的Return返回后方法結(jié)束執(zhí)行,不會執(zhí)行try-catch塊中的return語句;
4. 其它建議
- 有 try 塊放到了事務(wù)代碼中,catch 異常后,如果需要回滾事務(wù),一定要注意手動回 滾事務(wù)。
- 防止 NPE,是程序員的基本修養(yǎng),注意 NPE 產(chǎn)生的場景;