Java代碼標準說明_第1頁
Java代碼標準說明_第2頁
Java代碼標準說明_第3頁
Java代碼標準說明_第4頁
Java代碼標準說明_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、精選文檔Java代碼標準說明 1. 環(huán)境配置21.1. 軟件21.2. 項目導入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. 布局(Placement)

2、153.7. 簡潔語句(Single Statement)163.8. 復合語句(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. 代碼評審和重構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. 項目導入1、選擇SVN地址 輸入帳號密碼完成即可1.3. 項目編碼配置文項目全部編碼格式統(tǒng)一接受UTF-8 設置修改types 和methods注釋的方法修改

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

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

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

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

8、解程序有關的信息。例如,相應的包如何被建立或位于哪個名目下之類的信息不應包括在注釋中。在注釋里,對設計決策中重要的或者不是顯而易見的地方進行說明是可以的,但應避開供應代碼中已清楚表達出來的重復信息,多余的注釋很簡潔過時。通常應避開那些代碼更新就可能過時的注釋。類以及類中的每個方法必需有注釋。方法中的代碼關鍵部分必需有注釋,解釋代碼的意思。Ø 文本注釋 類注釋 /* * <b>function:</b> 增刪改查組件規(guī)范接口 * project Xcj * package com.xcj.admin.base * fileName BaseDao.java *

9、createDate 2010-03-30 下午05:28:03 * author xx_xx * email xx */Ø 類中方法注釋 /* * <b>function:</b> 增加一個entity對象,返回是否添加成功 * createDate 2010-03-30 下午05:28:38 * author su_jian * param <T> 對象類型 * param entity 對象 * return boolean true/false * throws DataAccessException */Ø 單行注釋/獵取系統(tǒng)管

10、理員的全部權限2.6. 注釋范圍 a) 類的方法名和類名必需有注釋。例如 /* * <b>function:</b> 增加一個entity對象,返回是否添加成功 * createDate 2014-03-30 下午05:28:38 * author su_jian * param <T> 對象類型 * param entity 對象 * return boolean true/false * throws DataAccessException */ b) 類調(diào)用的方法以及關鍵代碼注釋。例如/進行靜態(tài)化處理staticService.buidSingleAr

11、ticle(article.getId();/生成二維碼圖片staticService.buidQRcode(article.getId(); c) 配置文件(Spring、DB、等)代碼注釋。例如<!-初始化時獵取的連接數(shù),取值應在minPoolSize與maxPoolSize之間。Default: 3 -> <property name="initialPoolSize"> <value>$c3p0.initialPoolSize</value> </property> <!-連接池中保留的最小連接數(shù)。-

12、> <property name="minPoolSize"> <value>$c3p0.minPoolSize</value>2.7. Controller、Service、Dao 等中的方法命名方法類型命名規(guī)章舉例(參數(shù)自己定義)初始化init+操作對象init ()新增save+操作對象save()、saveObject()刪除del+操作對象sdel()、delObject ()修改update+操作對象update()、updateObject ()新增+修改edit+操作對象edit()、editObject ()查看v

13、iew+操作對象view()、viewObject ()獵取單個對象get+操作對象get()、getObject ()獵取列表數(shù)據(jù)getListBypage+操作對象sgetXxListByPage()獵取集合數(shù)據(jù)getXList+操作對象sgetXxList()、getXxList Object()獵取樹形數(shù)據(jù)getXTree+操作對象sgetXxTree()、getXxTreeObject ()前后插入save(Before/After)+操作對象 saveObject ()/saveBeforeObject ()禁用disabled+操作對象disabled()、disabledObj

14、ect()啟用或激活active+操作對象sactive()、activeObject()授權assign+操作對象sassign()、assignObject ()撤銷unassign+操作對象sunassign()、unassignObject ().2.8. JSP頁面命名頁面類型命名規(guī)章舉例(參數(shù)自己定義)主頁操作對象index.jspobjectindex.jsp新增頁面操作對象save .jspobjectsave.jsp修改頁面操作對象edit.jspobjectedit.jsp查看頁面操作對象detail.jspobjectdetail.jsp授權操作對象assign.jspo

15、bjectassign.jsp. 3. 代碼書寫規(guī)范類的方法的代碼行數(shù)不能過長,盡量把握在100行(90%),長的方法要拆分成私有函數(shù)。3.1. 返回值返回值的狀況,假如只需要一個對象里邊的屬性值,則無需返回整個對象。返回值就行。 在一般狀況下,方法返回值不應返回null。而是盡量使用特別代替返回null。假如在特殊狀況必需返回null, 必需在方法說明中加以特殊說明,如使用“特殊留意”等字樣。例如:從一個集合類實例中提取一個對象,由于有些集合類實例是允許null作為鍵或值的,這個時候用特別取代返回null就不合適了。假如方法的返回值是集合類對象,而且返回的集合對象不包含任何元素時,則應返回0

16、長度或0大小的集合對象。不能返回null。3.2. 特別整個應用系統(tǒng)使用自行設計的唯一特別類,該類包括message(表示錯誤信息)和ID號(整型,表示特別類型)兩部分,該類在創(chuàng)建時是自動獲得類名、方法名、行號等信息。在系統(tǒng)開發(fā)和上線之后的一段時間內(nèi),特別信息要直接發(fā)送到掃瞄器頁面,以便于開發(fā)人員快速定位錯誤。 全部的Controller必需捕獲特別,全部的Service、Dao必需把特別拋到上一層進行相應的處理。假如沒有相應的Controller則在方法的最前面進行特別的捕獲處理。一個try-catch語句應當具有如下格式: try statements; catch (ExceptionC

17、lass e) statements; 一個try-catch語句后面也可能跟著一個finally語句,不論try代碼塊是否順當執(zhí)行完,它都會被執(zhí)行。 try statements; catch (ExceptionClass e) statements; finally statements; 特別DEMO如下: RequestMapping(value = "/save", method = RequestMethod.POST)public String save(ValidatedArticle article, Model model) try article.s

18、etCreateDate(DateUtil.getCurrentTimeByDate();article.setModifyDate(DateUtil.getCurrentTimeByDate();article.setBoring(1);article.setLoves(1);Integer id = articleService.saveAndGetIdByInteger(article);/以下是獵取方法String checkboxs=article.getCheckbox();if(checkboxs!=null)String strs=checkboxs.split(",

19、");for (int i = 0; i < strs.length; i+) ArticleTag articleTag= new ArticleTag();articleTag.setArticleId(id);articleTag.setTagId(Integer.valueOf(strsi);articleTagService.save(articleTag); /進行靜態(tài)化處理staticService.buidSingleArticle(id);/生成二維碼圖片staticService.buidQRcode(id); catch (Exception e) log

20、.error("文章:保存對象出錯:" + e.getMessage();e.printStackTrace();return "redirect:/admin/article/articleList_jsp" 其中紅色部分為特別處理。即全部的Controller中方法必需進行特別的處理。 常用工具類中特別DEMO如下: public static String readTxtFile(String filePath)InputStreamReader inputReader = null; BufferedReader bufferReader = n

21、ull; OutputStream outputStream = null; try InputStream inputStream = new FileInputStream(filePath); inputReader = new InputStreamReader(inputStream); bufferReader = new BufferedReader(inputReader); / 讀取一行 String line = null; StringBuffer strBuffer = new StringBuffer(); while (line = bufferReader.rea

22、dLine() != null) strBuffer.append(line); return strBuffer.toString(); catch (IOException e) return null; finally 3.3. 換行(Wrapping Lines)盡量避開一行長度超過80個字符,由于很多終端和工具不能很好處理之。留意:用于文檔是的例子應當使用更短的行長,長度一般不超過70個字符。假如超過則使用換行來處理。 / 使用這種方式來換行if (condition1 && condition2)| (condition3 && condition4

23、)| !(condition5 && condition6) doSomethingAboutIt();/ OR USE THISif (condition1 && condition2) | (condition3 && condition4) | !(condition5 && condition6) doSomthingAoutIt();這里有三種可行的方法用于處理三元運算表達式:alpha = (aLongBooleanExpression) ? beta : gamma;alpha = (aLongBooleanExpr

24、ession) ? beta : gamma;alpha = (aLongBooleanExpression) ? beta : gamma;3.4. 聲明(Declaration)每行聲明變量的數(shù)量(Number Per Line)推舉一行一個聲明,由于這樣以利于寫注釋。亦即,int level; / indentation levelint size; / size of table要優(yōu)于,int level, size;不要將不同類型變量的聲明放在同一行,例如:int foo, fooarry; / WRONG!留意:上面的例子中,在類型和標識之間放了一個空格,另一種被允許的替代方法是使

25、用制表符:int level; / indentation levelint size; / size of tableObject currentEntry; / currently selected table entry3.5. 初始化(Initialization)盡量在聲明局部變量的同時進行初始化。唯一 不這么做理由是變量的初始值依靠于某些從前發(fā)生的計算。假如類存在父類,且父類沒有被初始化,先初始化父類。              留意:初始化父類時第一被

26、初始化的類永久是object類,父類總在子類之前被初始化。   假如類存在一個初始化對象,就執(zhí)行該方法。   除接口以外,初始化一個類之前必需保證其直接超類已被初始化,并且該初始化過程是由 Jvm 保證線程平安的。另外,并非全部的類都會擁有一個 <clinit>() 方法,在以下條件中該類不會擁有 <clinit>() 方法:該類既沒有聲明任何類變量,也沒有靜態(tài)初始化語句;該類聲明白類變量,但沒有明確使用類變量初始化語句或靜態(tài)初始化語句初始化;該類僅包含靜態(tài) final 變量的類變量初始化語句,并且類變量初始化語句是編譯

27、時常量表達式。     留意:<clinit>() 方法類變量初始化語句和類型的靜態(tài)初始化語句與在類中聲明的挨次全都      類初始化后,即可調(diào)用它的靜態(tài)方法,或者創(chuàng)建實例。父類靜態(tài)初始化->子類靜態(tài)初始化->父類初始化塊->父類構造方法->子類初始化塊->子類構造方法。3.6. 布局(Placement)只在代碼塊的開頭處聲明變量(一個塊是指任何被包含在大括號“”和“”中間的代碼)。不要在首次用于該變量時才聲明之,這會把留意力不集中的程序員搞糊涂,同時會阻礙代

28、碼在該作用域內(nèi)的可移植性。 void myMethod() int int1 = 0; if (condition) int int2 = 0; 該規(guī)章的一個例外是for循環(huán)的索引變量 for (int i = 0; I < maxLoops; i+) 避開聲明的局部變量掩蓋上一級聲明的變量。例如,不要在內(nèi)部代碼塊中聲明相同的變量名: int count; myMethod() if (condition) int count = 0; / AVOID 3.7. 簡潔語句(Single Statement) 每行至多包含一條語句,例如: argv+; / Correct argc-; /

29、 Correct argv+; argc-; / AVOID!3.8. 復合語句(Compound Statements)復合語句是包含在大括號中的語句序列,形如“ 語句 ”。例如下面各段。 被括其中的語句應當較之復合語句縮進一個層次。 左大括號“”應位于復合語句起始行的行尾;右大括號“”應另起一行并與復合語句首行對齊。 大括號可以被用于全部語句,包括單個語句,只要這些語句是諸如if else或for把握結構的一部分。這樣便于添加語句而無需擔憂由于忘了加括號而引入bug.3.9. 返回語句(return Statements) 個帶返回值的return語句不使用小括號“()”,除非它們以某種方

30、式使返回值更顯見。例如: return; return myDisk.size(); return (size ? size ; defaultSize);3.10. for語句(for Statements)一個for語句應當具有如下格式: for (initialization; condition; update) statements; 一個空的語句(全部工作都在初始化,條件推斷,更新子句中完成)應當具有如下格式: for (initialization; condition; update);當在for語句的初始化或更新子句中使用逗號時,避開因使用三個以上變量,而導致簡單度提高。若需

31、要,可以在for循環(huán)之前(為初始化子句)或for循環(huán)末尾(為更新子句)使用單獨的語句。3.11. while語句switch(while Statements)一個while語句應當具有如下格式: while (condition) statements; 一個空的while語句應當具有如下格式: while (condition);do-while語句(do-while Statements)一個do-while語句應當具有如下格式: do statements; while (condition);switch語句(switch Statements)一個switch語句應當具有如下格式:

32、 switch (condition) case ABC: statements; / * falls through */ case DEF: statements; break; case XYZ: statements; break; 3.12. 空行(Blank Lines)空行將規(guī)律相關的代碼段分隔開,以提高可讀性。下列狀況應總是使用兩個空行: 一個源文件的兩個片段(section)之間。 類聲明和接口聲明之間。下列狀況應當總是使用一個空行: 兩個方法之間。 方法內(nèi)的局部變量和方法的第一條語句之間。 塊注釋(參見“5.1.1”)或單行注釋(參見5.1.2)之前。 一個方法內(nèi)的兩個規(guī)律

33、段之間,用以提高可讀性。3.13. 空格(Blank Spaces)下列狀況應當使用空格: 一個緊跟著括號的關鍵應當被空格分開,例如: while (true) . 留意:空格不應當置于方法名與其左括號之間,這將有助于區(qū)分關鍵字和方法調(diào)用。 空白應當位于參數(shù)列表中逗號的后面。 全部的二元運算符,除了“.”,應當使用空格將之與操作數(shù)分開。一元操作符和操作數(shù)之間不應當加空格,比如:負號(“-”),自增(“+”)和自減(“-”)。例如: a += c + d; a = (a + b) / (c * d); while (d+ + s+) n+; printSize(“size is ” + foo

34、+ “n”); for語句中的表達式應當被空格分開,例如: for (expr1; expr2; expr3)強制轉(zhuǎn)型后應當跟一個空格,例如:myMethod(byte) aNum, (Object) x);myMethod(int) (cp + 5), (int) (i + 3) + 1);3.14. 圓括號(Parentheses) 一般而言,在含有多種運算符的表達式中使用括號來避開運算符優(yōu)先級問題,是個好方法。即便運算符的優(yōu)先級對你而言可能很清楚,但對其他人未必如此。你不能假設別的程序員和你一樣清楚運算符的優(yōu)先級。 if (a = b && c =d) / AVOID!

35、if (a = b) && (c = d) / RIGHT 返回值(Returning Values)設法讓你的程序結構符合目的。例如: if (booleanException) return true; else return false; 應當代之以如下方法: return booleanException;類似地:if (condition) return x; return y;應當寫為: return (condition ? x : y);3.15. 變量賦值(Variable Assignments)避開在一個語句中給多個變量賦相同的值。它很難讀懂。例如:foo

36、Bar.fChar = barFoo.lchar = c; / AVOID!不要將賦值運算符用在簡潔與相等關系運算符混淆的地方。例如: if (c+ = d+) / AVOID! (Java disallows) . 應當寫成 if (c+ = d+) ! = 0) 不要使用內(nèi)嵌(embedded)賦值運算符試圖提高運行時效率,這是編譯器的工作。例如:d = (a = b +c) + r; / AOVID!應當寫成 a = b + c; d = a + r;3.16. 去除警告在eclipse 中警告會以感嘆號的形式消滅, 編碼盡量去除警告。一般去除的警告包括一下幾類。1、導入未使用的類,請刪

37、除。2、未使用的變量,請刪除。3、實現(xiàn)序列話的類,沒有版本信息,請?zhí)砑影姹拘畔ⅰ?、沒有使用泛型的,請加上泛型。4. 代碼質(zhì)量Java項目開發(fā)過程中,由于開發(fā)人員的閱歷、Java代碼編寫習慣,以及缺乏統(tǒng)一的標準和管理流程,往往導致整個項目的代碼質(zhì)量較差,難于維 護,需要較大的測試投入和周期等問題。這些問題在一個項目組初建、需求和設計均具有不完全可預期性和完備性的全新項目中將尤為突出??梢越邮芤韵虏襟E來保證和提高整個項目的代 碼質(zhì)量:統(tǒng)一編碼規(guī)范、代碼樣式;靜態(tài)代碼分析(staticcodereview);單元測試;持續(xù)集成;代碼評審和重構 (Review&Refactor)。4.1. 統(tǒng)一編碼規(guī)范、代碼樣式規(guī)范統(tǒng)一的編碼會增加項目代碼的可讀性和可維護性,但實際狀況往往是項目組內(nèi)的Java代碼開發(fā)人員的編碼風格經(jīng)常各不相同,這可能是由于不同 的閱歷習慣或者缺乏編碼規(guī)范方面的學習造成的。這樣一來

溫馨提示

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

評論

0/150

提交評論