Java編程規(guī)范_第1頁
Java編程規(guī)范_第2頁
Java編程規(guī)范_第3頁
Java編程規(guī)范_第4頁
Java編程規(guī)范_第5頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、Java編程規(guī)范目錄Java編程規(guī)范11編碼規(guī)則12命名規(guī)范72.1類名、變量名(非final)、方法名72.2駝峰式命名72.3不能使用沒有任何含義的英文字母進行命名72.4不能使用拼音進行命名,統(tǒng)一使用準確的英文進行命名82.5包名82.6接口與類的命名82.7抽象類命名82.8實現(xiàn)類命名82.9工具類命名82.10變量命名82.115、方法命名92.12系統(tǒng)的命名約定91 編碼規(guī)則1、數(shù)據(jù)庫操作、IO操作等需要使用結(jié)束close()的對象必須在try -catch-finally 的finally中close(),如果有多個IO對象需要close(),需要分別對每個對

2、象的close()方法進行try-catch,防止一個IO對象關(guān)閉失敗其他IO對象都未關(guān)閉。手動控制事務(wù)提交也要進行關(guān)閉,對大對象進行關(guān)閉操作示例:try    / . .catch(IOException ioe)     /. .finally    try              out.close(); &#

3、160;      catch (IOException ioe)             /. .  try              in.close();       

4、60;catch (IOException ioe)             /. .    2、 系統(tǒng)非正常運行產(chǎn)生的異常捕獲后,如果不對該異常進行處理,則應(yīng)該記錄日志。說明:此規(guī)則指通常的系統(tǒng)非正常運行產(chǎn)生的異常,不包括一些基于異常的設(shè)計。若有特殊原因必須用注釋加以說明。logger.error(ioe,“類.方法描述”,參數(shù));示例:try    /. .catch (IOExce

5、ption ioe)    logger.error(ioe);3、自己拋出的異常必須要填寫詳細的描述信息。說明:便于問題定位。示例:throw new  IOException("Writing data error! Data: " + data.toString();4(刪除)、在程序中使用異常處理還是使用錯誤返回碼處理,根據(jù)是否有利于程序結(jié)構(gòu)來確定,并且異常和錯誤碼不應(yīng)該混合使用,推薦使用異常。說明:一個系統(tǒng)或者模塊應(yīng)該統(tǒng)一規(guī)劃異常類型和返回碼的含義。 但是不能用異常來做一般流程處理的方式,不要過多地使用異

6、常,異常的處理效率比條件分支低,而且異常的跳轉(zhuǎn)流程難以預(yù)測。注意:JDK1.5 程序內(nèi)部的錯誤碼可以使用枚舉來表示。5、 注意運算符的優(yōu)先級,并用括號明確表達式的操作順序,避免使用默認優(yōu)先級。說明:防止閱讀程序時產(chǎn)生誤解,防止因默認的優(yōu)先級與設(shè)計思想不符而導致程序出錯。示例:下列語句中的表達式word = (high << 8) | low     (1)if (a | b) && (a & c)      (2)if (a | b) < (c & d)&

7、#160;      (3)如果書寫為high << 8 | lowa | b && a & ca | b < c & d(1)(2)雖然不會出錯,但語句不易理解;(3)造成了判斷條件出錯。6、避免使用不易理解的數(shù)字,用有意義的標識來替代。涉及物理狀態(tài)或者含有物理意義的常量,不應(yīng)直接使用數(shù)字,必須用有意義的靜態(tài)變量或者枚舉來代替。示例:如下的程序可讀性差。if (state = 0)    state = 1;    

8、;.  / program code應(yīng)改為如下形式:private final static int TRUNK_IDLE = 0;private final static int TRUNK_BUSY = 1;private final static int TRUNK_UNKNOWN = -1;  if (state = TRUNK_IDLE)    state = TRUNK_BUSY;    .  / program code注意:JDK 1.5 下建議使用枚舉來表示

9、。7(刪除)、數(shù)組聲明的時候使用 int index ,而不要使用 int index說明:使用int index 格式使程序的可讀性較差,int  index 表示聲明了一個int數(shù)組(int )叫做index示例:如下程序可讀性差:public int getIndex()    .如下程序可讀性好:public int getIndex()    .8、 不要使用 System.out

10、60;與 System.err 進行控制臺打印,應(yīng)該使用工具類(如:日志工具)進行統(tǒng)一記錄或者打印。說明:代碼發(fā)布的時候可以統(tǒng)一關(guān)閉控制臺打印,代碼調(diào)試的時候又可以打開控制臺打印,方便調(diào)試。9、集合必須指定模板類型說明:方便程序閱讀,除去強制轉(zhuǎn)換代碼示例:Map<String,MyObject> map = new HashMap<String,MyObject>();10、一個文件不要定義兩個類(并非指內(nèi)部類)。說明:方便程序的閱讀與代碼的維護注意:一個文件定義兩個類,在play框架的生產(chǎn)模式會報錯,因為play重寫了class的加載方法,生產(chǎn)模式

11、啟動時進行預(yù)編譯,這時會保存;但是在開發(fā)模式則不會報錯,因為開發(fā)模式不會進行預(yù)編寫,而是在運行時編譯,jvm運行時編譯則不會出錯。11(抽取成一個日志公用類)、 對Debug,Info級別日志輸出前必須對當前的調(diào)試等級先進行判斷。說明:日志一般都會有不少字符串的處理,如果不是Debug級別就沒有必要進行處理示例:if (logger.debugEnable()logger.debug(“request : ” + request.getMethod();12、不要使用循環(huán)將集合轉(zhuǎn)為數(shù)組,可以使用集合的toArray()方法。說明:更好的性能,代碼更加簡潔(1、數(shù)據(jù)量多的情況下,ArrayLis

12、t跟LinkedList是否應(yīng)該區(qū)分循環(huán)訪問方式,即(for跟foreach)的區(qū)別;(2、當需要使用Map進行拼接數(shù)據(jù)的時候,HashMap跟LinkedHashMap使用循環(huán)打印出來的數(shù)據(jù)順序跟添加的順序是不一樣的,是否也需要區(qū)分開;示例:ArrayList list = new ArrayList();list.add.String array = new Stringlist.size();list.toArray(array);13、JDK 1.4中大量字符串的“相加”操作應(yīng)該使用StringBuffer。JDK 1.5以上版本大量字符串“相加等于”操作如果不涉及線程安全應(yīng)該使用St

13、ringBuilder,如果有線程安全的要求應(yīng)該使用StringBuffer說明:大量的String相加等于處理性能消耗較多?!按罅俊币话阒?次“+=”以上或者在循環(huán)中進行字符串+=操作。StringBuilder的性能優(yōu)于StringBuffer,但是是非線程安全的。示例:不推薦:String str = “”;str += ”a”;str += ”b”;str += ”c”;str += ”d”;str += ”e”;推薦:StringBuilder sb = new StringBuilder();sb.append(“aa”);sb.append(“bb”);sb.append(“cc

14、”);JDK 1.4使用 StringBuffer。JDK1.5如果不涉及線程安全用StringBuilder替代以上示例。14、對類中日志工具對象logger應(yīng)聲明為static. 說明:防止重復(fù)new 出logger對象(logger指各種日志工具類,可以是log4j,jdk logger,內(nèi)部API等,盡管一些logger對LogFactory工廠有一些優(yōu)化,但是我們也必須防止代碼沒有必要的運行)。15、不能用“=”比較兩個字符串(Long對象等)內(nèi)容相等,能用基本類型就是基本類型說明:兩個字符串在比較內(nèi)容是否相等的時候,如果使用“=”,當兩個字符串不是指向內(nèi)存中同一地址,那么

15、即使這兩個字符串內(nèi)容一樣,但是用“=”比較出來的結(jié)果也是false。所以兩個字符串在比較內(nèi)容是否相等的時候一定要使用“equals”方法。示例:public class Test public static void main(String args)String a = new String("a");String a2 = "a"if(a = a2)System.out.println("a = a2 return true.");elseSystem.out.println("a = a2 return false.&

16、quot;);if(a.equals(a2)System.out.println("a.equals(a2) return true.");elseSystem.out.println("a.equals(a2) return false.");最終輸出的結(jié)果為:a = a2 return false.a.equals(a2) return true.16、對list做foreach循環(huán)時,循環(huán)代碼中不能修改list的結(jié)構(gòu)說明:在jdk1.5版以上的foreach循環(huán)寫法中,不能在循環(huán)代碼中對正在循環(huán)的list的結(jié)構(gòu)進行修改,即對list做add、rem

17、ove等操作,如果做了這些操作,必須立即退出循環(huán),否則會拋出異常。17、避免空指針異常,增加靜態(tài)代碼檢查 說明:空指針異常是編碼過程中最常見的異常,在使用一個對象的時候,如果對象可能為空,并且使用次對象可能會造成空指針異常,那么需要先判斷對象是否為空,再使用這個對象。18、避免下標越界,增加靜態(tài)代碼檢查說明:訪問數(shù)組、List等容器內(nèi)的元素時,必須首先檢查下標是否越界,杜絕下標越界異常的發(fā)生。19、將字符串轉(zhuǎn)數(shù)字時沒有捕獲NumberFormatException異常,寫工具類說明:調(diào)用Java方法將字符串轉(zhuǎn)換為數(shù)字時,如果字符串的格式非法,會拋出運行時異常NumberFormatE

18、xception。示例:錯誤例子:public Integer getInteger1(String number)/ 如果number格式非法,會拋出NumberFormatExceptionreturn Integer.valueOf(number);正確的處理方法如下:public Integer getInteger2(String number)tryreturn Integer.valueOf(number);catch (NumberFormatException e)./記錄日志異常信息return null;注意:在捕獲異常后一定要記錄日志。20、循環(huán)體編碼時不考慮性能,循環(huán)

19、體中包含不需要的重復(fù)邏輯。(考慮循環(huán)體的性能)說明:循環(huán)體是軟件中最容易造成性能問題的地方,所以在進行循環(huán)體編碼時務(wù)必考慮性能問題。在循環(huán)體內(nèi)重復(fù)使用且不會變化的資源(如變量、文件對象、數(shù)據(jù)庫連接等),應(yīng)該在循環(huán)體開始前構(gòu)造并初始化,避免在循環(huán)體內(nèi)重復(fù)和構(gòu)造初始化造成CPU資源的浪費。除非業(yè)務(wù)場景需要,避免在循環(huán)體內(nèi)構(gòu)造try.catch塊,因為每次進入、退出try.catch塊都會消耗一定的CPU資源,將try.catch塊放在循環(huán)體之外可以節(jié)省大量的執(zhí)行時間。21、equals操作時沒有將常量放在equals操作符的左邊,增加靜態(tài)代碼檢查說明:字符串變量與常量比較時,先寫常量,這樣可以避免

20、空指針異常。示例:public static final String SP_NAME = "SPNAME" public void equalsConst()     String temp = null;     /錯誤;/在temp為null的情況下,此時會導致意想不到的異常拋出,如果將常量放在左邊,就不會有這種問題。     if(temp.equals(SP_NAME)        &

21、#160;     temp = SP_NAME + "AA"      2 命名規(guī)范2.1 類名、變量名(非final)、方法名2.2 駝峰式命名2.3 不能使用沒有任何含義的英文字母進行命名2.4 不能使用拼音進行命名,統(tǒng)一使用準確的英文進行命名不采用簡寫方式命名(除公認的常用簡寫)2.5 包名以cn.pp.ppbase.項目名.xxx 命名,都采用小寫,連續(xù)的單詞只是簡單地連接起來,不使用下劃線。2.6 接口與類的命名接口不要以 I 開頭。如:IUs

22、erService,而直接采用具體的命名方式如UserService2.7 抽象類命名抽象類命名使用:Abstract+名詞的方式進行命名,如:AbstractMessage。2.8 實現(xiàn)類命名對于只有一個實現(xiàn)類的情況,通常先不采用接口方式,直接采用實現(xiàn)類即可,如果有多個實現(xiàn)類,則采用名稱+抽象名稱,如UserMessage、AdminMessage。注意:項目中的Service層,目前大多只有一個實現(xiàn),所以不采用接口方式,直接使用具體類即可。2.9 工具類命名統(tǒng)一使用:名詞+Util進行命名,如:UrlUtil、StringUtil2.10 變量命名所有變量(描述狀態(tài)的除外)統(tǒng)一以準確的名詞

23、性英文命名,名詞性英文語法如下:普通名詞,如:user、clubMember、order等組合名詞,即名詞+名詞,如:clubMemberServiceOrder,paymentResult等帶修飾語(定語)名詞,如:checkingResult,messageSendingTask(主動,用ing),closedOrder(已經(jīng)關(guān)閉的訂單,用ed)描述狀態(tài)的變量統(tǒng)一以準確的形容詞性英文命名,形容詞性英文語法如下:普通形容詞,如:active,inactive,valid,invalid等動詞轉(zhuǎn)形容詞,表示狀態(tài),如:close > closed,stop &

24、gt; stopped等動詞轉(zhuǎn)形容詞,標示能動,如:delete > deletable,use > useful等對于反映狀態(tài)的變量,不要在命名前面加“is”,因為自動生成的get方法,對于boolean值,方面名自動會變?yōu)閕s*常量用全大寫,單詞之間用“_”分割,如:public static final String QUERYCLUBMEMBER_HQL=”;對于成員變量,其名稱可省略所屬類的名稱,如:public class User  pri

25、vate String clubMemberName; /NOT GOOD private String name; /GOOD2.11 5、方法命名方法名命名規(guī)則:動詞:init,validate,pay等動詞+介詞+(賓語):compareTo,getById等動賓短語(表示動作):createUser,publishPrivilege謂表短語(表示狀態(tài)):isClosed,isUserExisted,canUserBeDeleted等單復(fù)數(shù)的使用,對于一些動作需要操作多個對象,方法名要通過名詞復(fù)數(shù)反映出來,例如:deleteOrders(刪除訂單,可能多個)如果一個方法設(shè)計兩個動作或?qū)ο?,用“And”連接,如:createProductAndTag,但一般情況下,不推薦一個方法做多于一件事情如非必要,或常見的簡寫,盡量不要使用簡寫,因為簡寫很難閱讀,容易誤解,寧愿方法名稍微長一些,也要讓方法名用正確的短語來表述,由于一個方法一般不建議做多于一件事情,所以方法名一般不會太長。一些Java

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論