Java代碼標(biāo)準(zhǔn)說明參考模板_第1頁
Java代碼標(biāo)準(zhǔn)說明參考模板_第2頁
Java代碼標(biāo)準(zhǔn)說明參考模板_第3頁
Java代碼標(biāo)準(zhǔn)說明參考模板_第4頁
Java代碼標(biāo)準(zhǔn)說明參考模板_第5頁
已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、Java代碼標(biāo)準(zhǔn)說明1 / 28 1. 環(huán)境配置21.1. 軟件21.2. 項目導(dǎo)入21.3. 項目編碼配置32. 項目通用命名規(guī)則62.1. 命名方式62.2. 方法命名規(guī)則62.3. 變量命名規(guī)則62.4. 常量命名規(guī)則72.5. 注釋72.6. 注釋范圍82.7. Controller、Service、Dao 等中的方法命名92.8. JSP頁面命名103. 代碼書寫規(guī)范103.1. 返回值103.2. 異常113.3. 換行(Wrapping Lines)133.4. 聲明(Declaration)143.5. 初始化(Initialization)153.6. 布局(Placemen

2、t)153.7. 簡單語句(Single Statement)163.8. 復(fù)合語句(Compound Statements)163.9. 返回語句(return Statements)163.10. for語句(for Statements)173.11. while語句switch(while Statements)173.12. 空行(Blank Lines)183.13. 空格(Blank Spaces)183.14. 圓括號(Parentheses)193.15. 變量賦值(Variable Assignments)203.16. 去除警告204. 代碼質(zhì)量214.1. 統(tǒng)一編碼規(guī)范

3、、代碼樣式214.2. 靜態(tài)代碼分析214.3. 單元測試214.4. 持續(xù)集成224.5. 代碼評審和重構(gòu)221. 環(huán)境配置1.1. 軟件軟件名稱版本備注Myeclipse6.5試用版JDKJdk.1.6.0_45sunJDK開源Tomcat6.0.37Apache開源Mysql5.0.18/5.1開源SQLyog9.6.2試用版SVNsubeclipse-site-1.6.5插件SVN客戶端TortoiseSVN 1.6.7插件1.2. 項目導(dǎo)入1、選擇SVN地址 輸入帳號密碼完成即可1.3. 項目編碼配置文項目所有編碼格式統(tǒng)一采用UTF-8 設(shè)置修改types 和methods注釋的方法

4、修改以上則類名自動加注釋,需要修改里邊的信息 方法名注釋:在方法的前面輸入” /* ” b然后回車自動出現(xiàn)注釋調(diào)整樣式即可。 2. 項目通用命名規(guī)則2.1. 命名方式文件名、變量名稱使用有意義的英文(或縮寫)進行命名,名稱與數(shù)據(jù)表結(jié)構(gòu)的名稱命名保持一致,便于提高查閱效率。所有由多個單詞組成的名稱統(tǒng)一用駝峰法則進行命名。駝峰法則是由一個或多個單字連結(jié)在一起,而構(gòu)成的唯一識別字時,第一個單字以小寫字母開始,第二個單字的首字母大寫或每一個單字的首字母都采用大寫字母,例如: 業(yè)務(wù)名稱為角色,則命名為 RoleController 、RoleServiceImpl 、findUniqueEntity 等

5、。所有的命名根據(jù)業(yè)務(wù)名稱的英文或者中文拼音,優(yōu)先采用英文。2.2. 方法命名規(guī)則方法名應(yīng)是一個動詞或動名結(jié)構(gòu),采用大小寫混和的方式,其中第一個單詞的首字母用小寫,其后單詞的首字母大寫。例如:Xxxxx.getBmList();每個方法前必須加說明包括:參數(shù)說明、返回值說明、異常說明。如果方法名實在是太長可以對變量名縮寫,但是必須添加相應(yīng)的說明。2.3. 變量命名規(guī)則變量命名一般采用大小寫混和的方式,第一個單詞的首字母小寫,其后單詞的首字母大寫,變量名一般不要用下劃線或美元符號開頭。變量名應(yīng)簡短且有意義,即,能夠指出其用途。除非是一次性的臨時變量,應(yīng)盡量避免單個字符的變量名。(1)類的實例對象定

6、義如下:Person person;(2)同一個類的多個對象可以采用一下定義方式:Person person1;Person person2;(3)集合類的實例命名使用集合包含元素的英文名稱的復(fù)數(shù)表示,例如:Vector persons;(4)如果變量名實在是太長可以對變量名縮寫,但是必須在類說明或方法說明部分(視縮寫的范圍而定)進行說明。(5)數(shù)組的聲明要用int packets的形式,而不要用int packets。2.4. 常量命名規(guī)則類常量和ANSI常量的命名應(yīng)全部用大寫,單詞間用下劃線隔開。例如:final static int MIN_WIDTH = 4;2.5. 注釋Java程序

7、有兩類注釋:實現(xiàn)注釋(implementation comments)和文檔注釋(document comments)。實現(xiàn)注釋是那些在C+中見過的,使用/*/和/界定的注釋。文檔注釋(被稱為“doc comments”)是Java獨有的,并由/*/界定。文檔注釋可以通過javadoc工具轉(zhuǎn)換成HTML文件。實現(xiàn)注釋用以注釋代碼或或者實現(xiàn)細(xì)節(jié)。文檔注釋從實現(xiàn)自由(implemtentation-free)的角度描述代碼的規(guī)范。它可以被那些手頭沒有源碼的開發(fā)人員讀懂。注釋應(yīng)被用來給出代碼的總括,并提供代碼自身沒有提供的附加信息。注釋應(yīng)該僅包含與閱讀和理解程序有關(guān)的信息。例如,相應(yīng)的包如何被建立或

8、位于哪個目錄下之類的信息不應(yīng)包括在注釋中。在注釋里,對設(shè)計決策中重要的或者不是顯而易見的地方進行說明是可以的,但應(yīng)避免提供代碼中已清晰表達(dá)出來的重復(fù)信息,多余的注釋很容易過時。通常應(yīng)避免那些代碼更新就可能過時的注釋。類以及類中的每個方法必須有注釋。方法中的代碼關(guān)鍵部分必須有注釋,解釋代碼的意思。 文本注釋 類注釋 /* * function: 增刪改查組件規(guī)范接口 * project Xcj * package com.xcj.admin.base * fileName BaseDao.java * createDate 2010-03-30 下午05:28:03 * author xx_xx

9、 * email xx */ 類中方法注釋 /* * function: 增加一個entity對象,返回是否添加成功 * createDate 2010-03-30 下午05:28:38 * author su_jian * param 對象類型 * param entity 對象 * return boolean true/false * throws DataAccessException */ 單行注釋/獲取系統(tǒng)管理員的所有權(quán)限2.6. 注釋范圍 a) 類的方法名和類名必須有注釋。例如 /* * function: 增加一個entity對象,返回是否添加成功 * createDate 2

10、014-03-30 下午05:28:38 * author su_jian * param 對象類型 * param entity 對象 * return boolean true/false * throws DataAccessException */ b) 類調(diào)用的方法以及關(guān)鍵代碼注釋。例如/進行靜態(tài)化處理staticService.buidSingleArticle(article.getId();/生成二維碼圖片staticService.buidQRcode(article.getId(); c) 配置文件(Spring、DB、等)代碼注釋。例如 $c3p0.initialPool

11、Size $c3p0.minPoolSize2.7. Controller、Service、Dao 等中的方法命名方法類型命名規(guī)則舉例(參數(shù)自己定義)初始化init+操作對象init ()新增save+操作對象save()、saveObject()刪除del+操作對象sdel()、delObject ()修改update+操作對象update()、updateObject ()新增+修改edit+操作對象edit()、editObject ()查看view+操作對象view()、viewObject ()獲取單個對象get+操作對象get()、getObject ()獲取列表數(shù)據(jù)getList

12、Bypage+操作對象sgetXxListByPage()獲取集合數(shù)據(jù)getXList+操作對象sgetXxList()、getXxList Object()獲取樹形數(shù)據(jù)getXTree+操作對象sgetXxTree()、getXxTreeObject ()前后插入save(Before/After)+操作對象 saveObject ()/saveBeforeObject ()禁用disabled+操作對象disabled()、disabledObject()啟用或激活active+操作對象sactive()、activeObject()授權(quán)assign+操作對象sassign()、assig

13、nObject ()撤銷unassign+操作對象sunassign()、unassignObject ().2.8. JSP頁面命名頁面類型命名規(guī)則舉例(參數(shù)自己定義)主頁操作對象index.jspobjectindex.jsp新增頁面操作對象save .jspobjectsave.jsp修改頁面操作對象edit.jspobjectedit.jsp查看頁面操作對象detail.jspobjectdetail.jsp授權(quán)操作對象assign.jspobjectassign.jsp. 3. 代碼書寫規(guī)范類的方法的代碼行數(shù)不能過長,盡量控制在100行(90%),長的方法要拆分成私有函數(shù)。3.1.

14、返回值返回值的情況,如果只需要一個對象里邊的屬性值,則無需返回整個對象。返回值就行。 在一般情況下,方法返回值不應(yīng)返回null。而是盡量使用異常代替返回null。如果在特殊情況必須返回null, 必須在方法說明中加以特別說明,如使用“特別注意”等字樣。例如:從一個集合類實例中提取一個對象,因為有些集合類實例是允許null作為鍵或值的,這個時候用異常取代返回null就不合適了。如果方法的返回值是集合類對象,而且返回的集合對象不包含任何元素時,則應(yīng)返回0長度或0大小的集合對象。不能返回null。3.2. 異常整個應(yīng)用系統(tǒng)使用自行設(shè)計的唯一異常類,該類包括message(表示錯誤信息)和ID號(整型

15、,表示異常類型)兩部分,該類在創(chuàng)建時是自動獲得類名、方法名、行號等信息。在系統(tǒng)開發(fā)和上線之后的一段時間內(nèi),異常信息要直接發(fā)送到瀏覽器頁面,以便于開發(fā)人員迅速定位錯誤。 所有的Controller必須捕獲異常,所有的Service、Dao必須把異常拋到上一層進行相應(yīng)的處理。如果沒有相應(yīng)的Controller則在方法的最前面進行異常的捕獲處理。一個try-catch語句應(yīng)該具有如下格式: try statements; catch (ExceptionClass e) statements; 一個try-catch語句后面也可能跟著一個finally語句,不論try代碼塊是否順利執(zhí)行完,它都會被執(zhí)

16、行。 try statements; catch (ExceptionClass e) statements; finally statements; 異常DEMO如下: RequestMapping(value = /save, method = RequestMethod.POST)public String save(ValidatedArticle article, Model model) try article.setCreateDate(DateUtil.getCurrentTimeByDate();article.setModifyDate(DateUtil.getCurren

17、tTimeByDate();article.setBoring(1);article.setLoves(1);Integer id = articleService.saveAndGetIdByInteger(article);/以下是獲取方法String checkboxs=article.getCheckbox();if(checkboxs!=null)String strs=checkboxs.split(,);for (int i = 0; i strs.length; i+) ArticleTag articleTag= new ArticleTag();articleTag.set

18、ArticleId(id);articleTag.setTagId(Integer.valueOf(strsi);articleTagService.save(articleTag); /進行靜態(tài)化處理staticService.buidSingleArticle(id);/生成二維碼圖片staticService.buidQRcode(id); catch (Exception e) log.error(文章:保存對象出錯: + e.getMessage();e.printStackTrace();return redirect:/admin/article/articleList_jsp;

19、 其中紅色部分為異常處理。即所有的Controller中方法必須進行異常的處理。 常用工具類中異常DEMO如下: public static String readTxtFile(String filePath)InputStreamReader inputReader = null; BufferedReader bufferReader = null; OutputStream outputStream = null; try InputStream inputStream = new FileInputStream(filePath); inputReader = new InputSt

20、reamReader(inputStream); bufferReader = new BufferedReader(inputReader); / 讀取一行 String line = null; StringBuffer strBuffer = new StringBuffer(); while (line = bufferReader.readLine() != null) strBuffer.append(line); return strBuffer.toString(); catch (IOException e) return null; finally 3.3. 換行(Wrap

21、ping Lines)盡量避免一行長度超過80個字符,因為很多終端和工具不能很好處理之。注意:用于文檔是的例子應(yīng)該使用更短的行長,長度一般不超過70個字符。如果超過則使用換行來處理。 / 使用這種方式來換行if (condition1 & condition2)| (condition3 & condition4)| !(condition5 & condition6) doSomethingAboutIt();/ OR USE THISif (condition1 & condition2) | (condition3 & condition4) | !(condition5 & condi

22、tion6) doSomthingAoutIt();這里有三種可行的方法用于處理三元運算表達(dá)式:alpha = (aLongBooleanExpression) ? beta : gamma;alpha = (aLongBooleanExpression) ? beta : gamma;alpha = (aLongBooleanExpression) ? beta : gamma;3.4. 聲明(Declaration)每行聲明變量的數(shù)量(Number Per Line)推薦一行一個聲明,因為這樣以利于寫注釋。亦即,int level; / indentation levelint size;

23、 / size of table要優(yōu)于,int level, size;不要將不同類型變量的聲明放在同一行,例如:int foo, fooarry; / WRONG!注意:上面的例子中,在類型和標(biāo)識之間放了一個空格,另一種被允許的替代方法是使用制表符:int level; / indentation levelint size; / size of tableObject currentEntry; / currently selected table entry3.5. 初始化(Initialization)盡量在聲明局部變量的同時進行初始化。唯一 不這么做理由是變量的初始值依賴于某些先前發(fā)

24、生的計算。如果類存在父類,且父類沒有被初始化,先初始化父類。 注意:初始化父類時第一被初始化的類永遠(yuǎn)是object類,父類總在子類之前被初始化。如果類存在一個初始化對象,就執(zhí)行該方法。 除接口以外,初始化一個類之前必須保證其直接超類已被初始化,并且該初始化過程是由 Jvm 保證線程安全的。另外,并非所有的類都會擁有一個 () 方法,在以下條件中該類不會擁有 () 方法:該類既沒有聲明任何類變量,也沒有靜態(tài)初始化語句;該類聲明了類變量,但沒有明確使用類變量初始化語句或靜態(tài)初始化語句初始化;該類僅包含靜態(tài) final 變量的類變量初始化語句,并且類變量初始化語句是編譯時常量表達(dá)式。 注意:() 方

25、法類變量初始化語句和類型的靜態(tài)初始化語句與在類中聲明的順序一致 類初始化后,即可調(diào)用它的靜態(tài)方法,或者創(chuàng)建實例。父類靜態(tài)初始化-子類靜態(tài)初始化-父類初始化塊-父類構(gòu)造方法-子類初始化塊-子類構(gòu)造方法。3.6. 布局(Placement)只在代碼塊的開始處聲明變量(一個塊是指任何被包含在大括號“”和“”中間的代碼)。不要在首次用于該變量時才聲明之,這會把注意力不集中的程序員搞糊涂,同時會妨礙代碼在該作用域內(nèi)的可移植性。 void myMethod() int int1 = 0; if (condition) int int2 = 0; 該規(guī)則的一個例外是for循環(huán)的索引變量 for (int i

26、 = 0; I maxLoops; i+) 避免聲明的局部變量覆蓋上一級聲明的變量。例如,不要在內(nèi)部代碼塊中聲明相同的變量名: int count; myMethod() if (condition) int count = 0; / AVOID 3.7. 簡單語句(Single Statement) 每行至多包含一條語句,例如: argv+; / Correct argc-; / Correct argv+; argc-; / AVOID!3.8. 復(fù)合語句(Compound Statements)復(fù)合語句是包含在大括號中的語句序列,形如“ 語句 ”。例如下面各段。 被括其中的語句應(yīng)該較之復(fù)

27、合語句縮進一個層次。 左大括號“”應(yīng)位于復(fù)合語句起始行的行尾;右大括號“”應(yīng)另起一行并與復(fù)合語句首行對齊。 大括號可以被用于所有語句,包括單個語句,只要這些語句是諸如if else或for控制結(jié)構(gòu)的一部分。這樣便于添加語句而無需擔(dān)心由于忘了加括號而引入bug.3.9. 返回語句(return Statements) 個帶返回值的return語句不使用小括號“()”,除非它們以某種方式使返回值更顯見。例如: return; return myDisk.size(); return (size ? size ; defaultSize);3.10. for語句(for Statements)一個f

28、or語句應(yīng)該具有如下格式: for (initialization; condition; update) statements; 一個空的語句(所有工作都在初始化,條件判斷,更新子句中完成)應(yīng)該具有如下格式: for (initialization; condition; update);當(dāng)在for語句的初始化或更新子句中使用逗號時,避免因使用三個以上變量,而導(dǎo)致復(fù)雜度提高。若需要,可以在for循環(huán)之前(為初始化子句)或for循環(huán)末尾(為更新子句)使用單獨的語句。3.11. while語句switch(while Statements)一個while語句應(yīng)該具有如下格式: while (co

29、ndition) statements; 一個空的while語句應(yīng)該具有如下格式: while (condition);do-while語句(do-while Statements)一個do-while語句應(yīng)該具有如下格式: do statements; while (condition);switch語句(switch Statements)一個switch語句應(yīng)該具有如下格式: switch (condition) case ABC: statements; / * falls through */ case DEF: statements; break; case XYZ: statem

30、ents; break; 3.12. 空行(Blank Lines)空行將邏輯相關(guān)的代碼段分隔開,以提高可讀性。下列情況應(yīng)總是使用兩個空行: 一個源文件的兩個片段(section)之間。 類聲明和接口聲明之間。下列情況應(yīng)該總是使用一個空行: 兩個方法之間。 方法內(nèi)的局部變量和方法的第一條語句之間。 塊注釋(參見“5.1.1”)或單行注釋(參見5.1.2)之前。 一個方法內(nèi)的兩個邏輯段之間,用以提高可讀性。3.13. 空格(Blank Spaces)下列情況應(yīng)該使用空格: 一個緊跟著括號的關(guān)鍵應(yīng)該被空格分開,例如: while (true) . 注意:空格不應(yīng)該置于方法名與其左括號之間,這將有助

31、于區(qū)分關(guān)鍵字和方法調(diào)用。 空白應(yīng)該位于參數(shù)列表中逗號的后面。 所有的二元運算符,除了“.”,應(yīng)該使用空格將之與操作數(shù)分開。一元操作符和操作數(shù)之間不應(yīng)該加空格,比如:負(fù)號(“-”),自增(“+”)和自減(“-”)。例如: a += c + d; a = (a + b) / (c * d); while (d+ + s+) n+; printSize(“size is ” + foo + “n”); for語句中的表達(dá)式應(yīng)該被空格分開,例如: for (expr1; expr2; expr3)強制轉(zhuǎn)型后應(yīng)該跟一個空格,例如:myMethod(byte) aNum, (Object) x);myMe

32、thod(int) (cp + 5), (int) (i + 3) + 1);3.14. 圓括號(Parentheses) 一般而言,在含有多種運算符的表達(dá)式中使用括號來避免運算符優(yōu)先級問題,是個好方法。即便運算符的優(yōu)先級對你而言可能很清楚,但對其他人未必如此。你不能假設(shè)別的程序員和你一樣清楚運算符的優(yōu)先級。 if (a = b & c =d) / AVOID! if (a = b) & (c = d) / RIGHT 返回值(Returning Values)設(shè)法讓你的程序結(jié)構(gòu)符合目的。例如: if (booleanException) return true; else return fa

33、lse; 應(yīng)該代之以如下方法: return booleanException;類似地:if (condition) return x; return y;應(yīng)該寫為: return (condition ? x : y);3.15. 變量賦值(Variable Assignments)避免在一個語句中給多個變量賦相同的值。它很難讀懂。例如:fooBar.fChar = barFoo.lchar = c; / AVOID!不要將賦值運算符用在容易與相等關(guān)系運算符混淆的地方。例如: if (c+ = d+) / AVOID! (Java disallows) . 應(yīng)該寫成 if (c+ = d+)

34、 ! = 0) 不要使用內(nèi)嵌(embedded)賦值運算符試圖提高運行時效率,這是編譯器的工作。例如:d = (a = b +c) + r; / AOVID!應(yīng)該寫成 a = b + c; d = a + r;3.16. 去除警告在eclipse 中警告會以感嘆號的形式出現(xiàn), 編碼盡量去除警告。一般去除的警告包括一下幾類。1、導(dǎo)入未使用的類,請刪除。2、未使用的變量,請刪除。3、實現(xiàn)序列話的類,沒有版本信息,請?zhí)砑影姹拘畔ⅰ?、沒有使用泛型的,請加上泛型。4. 代碼質(zhì)量Java項目開發(fā)過程中,由于開發(fā)人員的經(jīng)驗、Java代碼編寫習(xí)慣,以及缺乏統(tǒng)一的標(biāo)準(zhǔn)和管理流程,往往導(dǎo)致整個項目的代碼質(zhì)量較差

35、,難于維 護,需要較大的測試投入和周期等問題。這些問題在一個項目組初建、需求和設(shè)計均具有不完全可預(yù)期性和完備性的全新項目中將尤為突出??梢圆捎靡韵虏襟E來保證和提高整個項目的代 碼質(zhì)量:統(tǒng)一編碼規(guī)范、代碼樣式;靜態(tài)代碼分析(staticcodereview);單元測試;持續(xù)集成;代碼評審和重構(gòu) (Review&Refactor)。4.1. 統(tǒng)一編碼規(guī)范、代碼樣式規(guī)范統(tǒng)一的編碼會增加項目代碼的可讀性和可維護性,但實際情況往往是項目組內(nèi)的Java代碼開發(fā)人員的編碼風(fēng)格常常各不相同,這可能是由于不同 的經(jīng)驗習(xí)慣或者缺乏編碼規(guī)范方面的學(xué)習(xí)造成的。這樣一來,其他項目成員或者維護人員在閱讀項目代碼時就需要花費更多的時間來理解代碼作者的意圖,所以制定 并采取統(tǒng)一的編碼規(guī)范就顯得很重要。編碼規(guī)范主要應(yīng)包

溫馨提示

  • 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)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論