




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、 廣州市億訊軟件開發(fā)有限公司J2EE軟件編碼原則編寫人:王德榮 2008年10月20日文檔修訂歷史版本號版本日期修訂內(nèi)容修訂人0.12008.10.20創(chuàng)建文檔王德榮審批本文檔需要如下批示。- 姓名- 簽名- 日期- - - 分發(fā)文檔已分發(fā)到下列人員- 姓名- 職務(wù)- - - - 參考的文檔及資料序號參考資料名稱作者版本日期1.目 錄1 前言72 總則72.1目錄結(jié)構(gòu)72.1.1總體目錄結(jié)構(gòu)說明72.1.2源代碼目錄說明82.1.3測試代碼目錄結(jié)構(gòu)說明92.1.4 JSP頁面目錄說明103 java編碼規(guī)范103.1版本號定義103.2文件名(File Names)123.2.1 文件后綴(F
2、ile Suffixes)123.2.2 常用文件名(Common File Names)123.3文件組織(File Organization)123.3.1 Java源文件(Java Source Files)123.4縮進排版(Indentation)153.4.1 行長度(Line Length)153.4.2 換行(Wrapping Lines)163.5注釋(Comments)183.5.1 實現(xiàn)注釋的格式(Implementation Comment Formats)193.5.2 文檔注釋(Documentation Comments)223.6聲明(Declarations)
3、233.6.1 每行聲明變量的數(shù)量(Number Per Line)233.6.2 初始化(Initialization)233.6.3 布局(Placement)243.6.4 類和接口的聲明(Class and Interface Declarations)253.7語句(Statements)263.7.1 簡單語句(Simple Statements)263.7.2 復(fù)合語句(Compound Statements)263.7.3 返回語句(return Statements)263.7.4 if,if-else,if else-if else語句273.7.5 for語句(for S
4、tatements)273.7.6 while語句(while Statements)283.7.7 do-while語句(do-while Statements)283.7.8 switch語句(switch Statements)293.7.9 try-catch語句(try-catch Statements)293.8空白(White Space)303.8.1 空行(Blank Lines)303.8.2 空格(Blank Spaces)313.9命名規(guī)范(Naming Conventions)323.10編程慣例(Programming Practices)333.10.1 提供對實
5、例以及類變量的訪問控制(Providing Access to Instance and Class Variables)333.10.2 引用類變量和類方法(Referring to Class Variables and Methods)343.10.3 常量(Constants)343.10.4 變量賦值(Variable Assignments)343.10.5 其它慣例(Miscellaneous Practices)353.11代碼范例(Code Examples)374 O/R mapping層規(guī)范395 業(yè)務(wù)邏輯層編碼規(guī)范396 視圖層編碼規(guī)范407 單元測試規(guī)范427.1單元
6、測試定義427.2工具427.3 測試代碼規(guī)范427.4 Junit測試實踐427.4.1 Set Up 和 Tear Down427.4.2 多個測試方法只初始化一次457.4.3 重復(fù)測試467.4.4 異常處理477.4.5 并發(fā)運行測試487.5 代碼和單元測試用例審查制度487.6 附錄1 Junit架構(gòu)一覽507.6.1 JUnit常用API508 Javadoc自動生成528.1如何插入注釋528.2常規(guī)注釋538.3為類和接口添加注釋558.4方法注釋568.5包和綜述注釋578.6 Javadoc命令579.4 Jsp命名規(guī)范5810 DAO層編碼規(guī)范5810.1 通用Bas
7、eDAO5910.1.1CommonBaseDao接口5910.1.2 CommonBaseDaoImpl5910.2具體EntityDAO6110.2.1 MetainfoDao6111.2.2 MetainfoDaoImpl6210.4 DAO命名規(guī)范6211 Service層編碼規(guī)范6311.1 Service命名規(guī)范6312日志6312.1使用spring2.0aspect編寫日志6412.1.1啟用AspectJ支持6412.1.2聲明一個切面6412.1.3聲明一個切入點(pointcut)6512.1.4 對方法進行日志注釋6512.1.5聲明通知6612.1.6通知參數(shù)(Adv
8、ice parameters)6613 異常處理661 前言本文旨在制定Java編碼標準。所有Java開發(fā)人員應(yīng)遵循本文中規(guī)定的標準。目的是使根據(jù)本文中的標準開發(fā)的代碼更容易維護、更易于理解并使編碼人員工作更加輕松!最終目的是節(jié)省項目的開發(fā)周期;提高項目的開發(fā)質(zhì)量。本文并不詳細介紹所有可能的標準和組合,而且剝奪開發(fā)人員的創(chuàng)造力并不是它的最終目的。它旨在解決一些將簡化所有程序人員工作的關(guān)鍵問題。 本文適用于互聯(lián)網(wǎng)組軟件代碼的開發(fā),部門成員必須閱讀的文檔。2 總則2.1目錄結(jié)構(gòu)2.1.1總體目錄結(jié)構(gòu)說明1 工作根目錄1 code1 build(編譯時的臨時目錄,存放class文件)1 lib(編譯
9、依賴jar包目錄) 注:此目錄按的jar包按分類存放,現(xiàn)定為使用ant,把WEB-INF下的lib包考到此目錄。1 src(主源代碼目錄)1 web(頁面文件代碼目錄)1 tool(工具目錄,如產(chǎn)生配置文件的工具)1 etc 目錄(放置打包所需配置文件)1 publish目錄(存放發(fā)布的ear,war,jar文件)1 doc 目錄(存放說明文檔)1 dist 目錄(存放發(fā)布到應(yīng)用服務(wù)下的所有運行文件,此目錄在發(fā)布時生成)2 build.xml(ant文件)2.1.2源代碼目錄說明1 工作根目錄(建議放d:根目錄,文件名稱為英文)1 code(存放系統(tǒng)統(tǒng)一使用的圖象文件)1 src(主源代碼目錄
10、)1 <業(yè)務(wù)模塊>1 com.poson.core(公用類)1 log(日志)1 dao(數(shù)據(jù)持久層公共類) 1 struts或webwork2(struts或webwork2基本類)1 common(公共類)1 utils (實用類)1 system(系統(tǒng)配置類)1 exception(異常處理)1 taglib(公共標簽庫) 1 (公用業(yè)務(wù)模塊)1 common(通用業(yè)務(wù)操作) 比如登陸業(yè)務(wù)1 com.poson.項目代號(核心代碼) 1 dao(數(shù)據(jù)持久模塊)1 ibatis1 maps(持久層映射文件)1 impl(各種DAO實現(xiàn))1 hibern
11、ate1 maps(持久層映射文件)1 impl(各種DAO實現(xiàn))1 jdbc1 maps(持久層映射文件)1 impl(各種DAO實現(xiàn))各種DAO接口(使采用的數(shù)據(jù)庫和采用的持久映射無關(guān))1 taglib(標簽庫) 1 common(公共類)1 utils(實用類)1 domain(存放領(lǐng)域?qū)ο?,包含業(yè)務(wù)實體和業(yè)務(wù)邏輯,參照spring2.0 sample domain層設(shè)置) 1 logic(業(yè)務(wù)邏輯) 各種業(yè)務(wù)實體 (domain下的業(yè)務(wù)實體,直接放置到domain下)1 struts或webwork2(struts或webwork2層)1 action1 form1 exception
12、(異常處理) 2.1.3測試代碼目錄結(jié)構(gòu)說明1 工作根目錄(文件名稱為英文)1 code(存放系統(tǒng)統(tǒng)一使用的圖象文件)1 src(測試代碼目錄)1 com1 <模塊名>1 report(測試代碼目錄)1 xml1 html測試代碼建立上原則上是一個類建立一個測試類,類中每個方法建立一個測試方法,如果幾個類或幾個方法之間的調(diào)用關(guān)系緊密也可以在一個測試類或一個方法中進行測試。2.1.4 JSP頁面目錄說明1 工作根目錄(文件名稱為英文)1 code(存放系統(tǒng)統(tǒng)一使用的圖象文件)1 web(頁面文件代碼目錄)1 script(javascript目錄)1 images(圖片目錄)1 cs
13、s(css目錄)1 common(公共目錄)1 layOut(頁面總體布局或框架目錄)1 <項目目錄>1 功能模塊目錄(功能模塊各個目錄)3 java編碼規(guī)范3.1版本號定義 系統(tǒng)版本號從1.0開始,表示客戶的第一版需求,與系統(tǒng)解決方案書的功能方向一致,代碼注解中since 中的版本號與已發(fā)布的系統(tǒng)版號第二位累加1.版本號格式:VX.X.X X X : alpha公司內(nèi)部測試 、 : beta表示外部人員測試、X表示可變數(shù)字在開發(fā)團隊內(nèi)部使用為VX.X.X,提交給測試時用VX.X.X. X,提交給客戶檢驗時用VX.X.X. X表示,X 變化情況描述如下:客戶檢收通過維護階段每次需求
14、的更改,X加1開發(fā)團隊內(nèi)部代碼調(diào)整,內(nèi)部測試時,X加1軟件架構(gòu)及系統(tǒng)功能80%90%發(fā)生重大變更時,X加1。X 。X 。X X V 提交給測試部門或客戶測時,X加1X 提交給測試部門或客戶測時,X加1舉例:在軟件開發(fā)過程中CVS的版本會列出如下:V1.0.1-第一次代碼調(diào)整V1.0.2-開發(fā)團隊內(nèi)部測試一次V1.0.3-開發(fā)團隊內(nèi)部測試一次V1.0.3 1 -測試部門內(nèi)部測試一次V1.0.4-開發(fā)團隊內(nèi)部測試一次V1.0.4 2 -測試部門測試一次V1.0.4 2 1-客戶外部測試一次(可以看到這個發(fā)布給客戶測試的版中開發(fā)團隊變動了4次,質(zhì)管部測試了2次,客戶對系統(tǒng)進行第一次檢驗)V1.0.5
15、-開發(fā)團隊內(nèi)部測試一次V1.0.6-開發(fā)團隊內(nèi)部測試一次V1.0.6 3-測試部門內(nèi)部測試一次V1.0.6 3 2-客戶外部測試一次3.2文件名(File Names)這部分列出了常用的文件名及其后綴。3.2.1 文件后綴(File Suffixes)Java程序使用下列文件后綴:文件類別文件后綴Java源文件.javaJava字節(jié)碼文件.class3.2.2 常用文件名(Common File Names)常用的文件名包括:文件名用途Build.xmlAnt編譯腳本文件3.3文件組織(File Organization)一個文件由被空行分割而成的段落以及標識每個段落的可選注釋共同組成。超過2
16、000行的程序難以閱讀,應(yīng)該盡量避免。"Java源文件范例"提供了一個布局合理的Java程序范例。3.3.1 Java源文件(Java Source Files)每個Java源文件都包含一個單一的公共類或接口。若私有類和接口與一個公共類相關(guān)聯(lián),可以將它們和公共類放入同一個源文件。公共類必須是這個文件中的第一個類或接口。Java源文件還遵循以下規(guī)則:- 開頭注釋(參見"開頭注釋")- 包和引入語句(參見"包和引入語句")- 類和接口聲明(參見"類和接口聲明") 開頭注釋(Beginning Comme
17、nts)所有的源文件都應(yīng)該在開頭有一個C語言風(fēng)格的注釋,其中列出類名、版本信息、日期和版權(quán)聲明: /* * Classname * * Version information * email * Date * * Copyright notice */ 附在Eclispe下創(chuàng)建步驟如下: 步驟:1: 單擊window->Preferences :如圖 2:選擇 java->Code Style->Code Templates 如圖: 按照Comments下面的屬性進行設(shè)置,主要是對Types進行設(shè)置3:單擊Edit ,編輯Types,如圖 包和引入語句(Pac
18、kage and Import Statements)在多數(shù)Java源文件中,第一個非注釋行是包語句。在它之后可以跟引入語句。例如: package java.awt;import java.awt.peer.CanvasPeer;注意:在包中不要用* ,比如java.awt.peer.*。 類和接口聲明(Class and Interface Declarations)下表描述了類和接口聲明的各個部分以及它們出現(xiàn)的先后次序。參見"Java源文件范例"中一個包含注釋的例子。 類/接口聲明的各部分注解1類/接口文檔注釋(/*/)該注釋中所需包含的信息,
19、參見"文檔注釋"2類或接口的聲明 3類/接口實現(xiàn)的注釋(/*/)如果有必要的話該注釋應(yīng)包含任何有關(guān)整個類或接口的信息,而這些信息又不適合作為類/接口文檔注釋。4類的(靜態(tài))變量首先是類的公共變量,隨后是保護變量,再后是包一級別的變量(沒有訪問修飾符,access modifier),最后是私有變量。5實例變量首先是公共級別的,隨后是保護級別的,再后是包一級別的(沒有訪問修飾符),最后是私有級別的。6構(gòu)造器 7方法這些方法應(yīng)該按功能,而非作用域或訪問權(quán)限,分組。例如,一個私有的類方法可以置于兩個公有的實例方法之間。其目的是為了更便于閱讀和理解代碼。3.4縮
20、進排版(Indentation)4個空格常被作為縮進排版的一個單位??s進的確切解釋并未詳細指定(空格 vs. 制表符)。一個制表符等于8個空格(而非4個)。3.4.1 行長度(Line Length)盡量避免一行的長度超過80個字符,因為很多終端和工具不能很好處理之。注意:用于文檔中的例子應(yīng)該使用更短的行長,長度一般不超過70個字符。3.4.2 換行(Wrapping Lines)當(dāng)一個表達式無法容納在一行內(nèi)時,可以依據(jù)如下一般規(guī)則斷開之:- 在一個逗號后面斷開- 在一個操作符前面斷開- 寧可選擇較高級別(higher-level)的斷開,而非較低級別(lower-level)的斷開- 新的一
21、行應(yīng)該與上一行同一級別表達式的開頭處對齊- 如果以上規(guī)則導(dǎo)致你的代碼混亂或者使你的代碼都堆擠在右邊,那就代之以縮進8個空格。 以下是斷開方法調(diào)用的一些例子: someMethod(longExpression1, longExpression2, longExpression3, longExpression4, longExpression5); var = someMethod1(longExpression1, someMethod2(longExpression2, longExpression3); 以下是兩個斷開算術(shù)表達式的例子。前者更好,因為斷開處位于括號表達式的外邊,這是個較高
22、級別的斷開。 longName1 = longName2 * (longName3 + longName4 - longName5) + 4 * longname6; /PREFFER longName1 = longName2 * (longName3 + longName4 - longName5) + 4 * longname6; /AVOID 以下是兩個縮進方法聲明的例子。前者是常規(guī)情形。后者若使用常規(guī)的縮進方式將會使第二行和第三行移得很靠右,所以代之以縮進8個空格 /CONVENTIONAL INDENTATION someMethod(int anArg, Object anoth
23、erArg, String yetAnotherArg, Object andStillAnother) . /INDENT 8 SPACES TO AVOID VERY DEEP INDENTS private static synchronized horkingLongMethodName(int anArg, Object anotherArg, String yetAnotherArg, Object andStillAnother) . if語句的換行通常使用8個空格的規(guī)則,因為常規(guī)縮進(4個空格)會使語句體看起來比較費勁。比如: /DONT USE THIS INDENTATIO
24、N if (condition1 && condition2) | (condition3 && condition4) |!(condition5 && condition6) /BAD WRAPS doSomethingAboutIt(); /MAKE THIS LINE EASY TO MISS /USE THIS INDENTATION INSTEAD if (condition1 && condition2) | (condition3 && condition4) |!(condition5 &
25、& condition6) doSomethingAboutIt(); /OR USE THIS if (condition1 && condition2) | (condition3 && condition4) |!(condition5 && condition6) doSomethingAboutIt(); 這里有三種可行的方法用于處理三元運算表達式: alpha = (aLongBooleanExpression) ? beta : gamma; alpha = (aLongBooleanExpression) ? beta :
26、 gamma; alpha = (aLongBooleanExpression) ? beta : gamma;3.5注釋(Comments)Java程序有兩類注釋:實現(xiàn)注釋(implementation comments)和文檔注釋(document comments)。實現(xiàn)注釋是那些在C+中見過的,使用/*.*/和/界定的注釋。文檔注釋(被稱為"doc comments")是Java獨有的,并由/*.*/界定。文檔注釋可以通過javadoc工具轉(zhuǎn)換成HTML文件。實現(xiàn)注釋用以注釋代碼或者實現(xiàn)細節(jié)。文檔注釋從實現(xiàn)自由(implementation-free)的角度描述代碼
27、的規(guī)范。它可以被那些手頭沒有源碼的開發(fā)人員讀懂。注釋應(yīng)被用來給出代碼的總括,并提供代碼自身沒有提供的附加信息。注釋應(yīng)該僅包含與閱讀和理解程序有關(guān)的信息。例如,相應(yīng)的包如何被建立或位于哪個目錄下之類的信息不應(yīng)包括在注釋中。在注釋里,對設(shè)計決策中重要的或者不是顯而易見的地方進行說明是可以的,但應(yīng)避免提供代碼中己清晰表達出來的重復(fù)信息。多余的注釋很容易過時。通常應(yīng)避免那些代碼更新就可能過時的注釋。注意:頻繁的注釋有時反映出代碼的低質(zhì)量。當(dāng)你覺得被迫要加注釋的時候,考慮一下重寫代碼使其更清晰。注釋不應(yīng)寫在用星號或其他字符畫出來的大框里。注釋不應(yīng)包括諸如制表符和回退符之類的特殊字符。3.5.1 實現(xiàn)注釋
28、的格式(Implementation Comment Formats)程序可以有4種實現(xiàn)注釋的風(fēng)格:塊(block)、單行(single-line)、尾端(trailing)和行末(end-of-line)。 塊注釋(Block Comments)塊注釋通常用于提供對文件,方法,數(shù)據(jù)結(jié)構(gòu)和算法的描述。塊注釋被置于每個文件的開始處以及每個方法之前。它們也可以被用于其他地方,比如方法內(nèi)部。在功能和方法內(nèi)部的塊注釋應(yīng)該和它們所描述的代碼具有一樣的縮進格式。塊注釋之首應(yīng)該有一個空行,用于把塊注釋和代碼分割開來,比如: /* * Here is a block comment. */ 塊注
29、釋可以以/*-開頭,這樣indent(1)就可以將之識別為一個代碼塊的開始,而不會重排它。 /*- * Here is a block comment with some very special * formatting that I want indent(1) to ignore. * * one * two * three */ 注意:如果你不使用indent(1),就不必在代碼中使用/*-,或為他人可能對你的代碼運行indent(1)作讓步。參見"文檔注釋" 單行注釋(Single-Line Comments)短注釋可以顯示在一行內(nèi),并與其后的代碼具
30、有一樣的縮進層級。如果一個注釋不能在一行內(nèi)寫完,就該采用塊注釋(參見"塊注釋")。單行注釋之前應(yīng)該有一個空行。以下是一個Java代碼中單行注釋的例子: if (condition) /* Handle the condition. */ . 尾端注釋(Trailing Comments)極短的注釋可以與它們所要描述的代碼位于同一行,但是應(yīng)該有足夠的空白來分開代碼和注釋。若有多個短注釋出現(xiàn)于大段代碼中,它們應(yīng)該具有相同的縮進。以下是一個Java代碼中尾端注釋的例子: if (a = 2) return TRUE; /* special case */ else
31、 return isPrime(a); /* works only for odd a */ 行末注釋(End-Of-Line Comments)注釋界定符"/",可以注釋掉整行或者一行中的一部分。它一般不用于連續(xù)多行的注釋文本;然而,它可以用來注釋掉連續(xù)多行的代碼段。以下是所有三種風(fēng)格的例子: if (foo > 1) / Do a double-flip. . else return false; / Explain why here. /if (bar > 1) / / / Do a triple-flip. / . / /else / r
32、eturn false; / 3.5.2 文檔注釋(Documentation Comments)注意:此處描述的注釋格式之范例,參見"Java源文件范例"若想了解更多,參見"How to Write Doc Comments for Javadoc",其中包含了有關(guān)文檔注釋標記的信息(return, param, see):若想了解更多有關(guān)文檔注釋和javadoc的詳細資料,參見javadoc的主頁:文檔注釋描述Java的類、接口、構(gòu)造器,方法,以及字段(field)。每個文檔注釋都會被置于注釋定界符/*.*/之中,一個注釋對應(yīng)一個類、接口或成員。該注
33、釋應(yīng)位于聲明之前: /* * The Example class provides . */ public class Example . 注意頂層(top-level)的類和接口是不用縮進的,而其成員是縮進的。描述類和接口的文檔注釋的第一行(/*)不需縮進;隨后的文檔注釋每行都縮進1格(使星號縱向?qū)R)。成員,包括構(gòu)造函數(shù)在內(nèi),其文檔注釋的第一行縮進4格,隨后每行都縮進5格。若你想給出有關(guān)類、接口、變量或方法的信息,而這些信息又不適合寫在文檔中,則可使用實現(xiàn)塊注釋(見5.1.1)或緊跟在聲明后面的單行注釋(見5.1.2)。例如,有關(guān)一個類實現(xiàn)的細節(jié),應(yīng)放入緊跟在類聲明后面的實現(xiàn)塊注釋中,而不
34、是放在文檔注釋中。文檔注釋不能放在一個方法或構(gòu)造器的定義塊中,因為Java會將位于文檔注釋之后的第一個聲明與其相關(guān)聯(lián)。3.6聲明(Declarations)3.6.1 每行聲明變量的數(shù)量(Number Per Line)推薦一行一個聲明,因為這樣以利于寫注釋。亦即, int level; / indentation level int size; / size of table要優(yōu)于,int level, size; 不要將不同類型變量的聲明放在同一行,例如: int foo, fooarray; /WRONG! 注意:上面的例子中,在類型和標識符之間放了一個空格,另一種被允許的替代方式是使用
35、制表符: intlevel; / indentation level intsize; / size of table ObjectcurrentEntry; / currently selected table entry 3.6.2 初始化(Initialization)盡量在聲明局部變量的同時初始化。唯一不這么做的理由是變量的初始值依賴于某些先前發(fā)生的計算。3.6.3 布局(Placement)只在代碼塊的開始處聲明變量。(一個塊是指任何被包含在大括號""和""中間的代碼。)不要在首次用到該變量時才聲明之。這會把注意力不集中的程序員搞糊涂,同時會妨
36、礙代碼在該作用域內(nèi)的可移植性。 void myMethod() int int1 = 0; / beginning of method block if (condition) int int2 = 0; / beginning of "if" block . 該規(guī)則的一個例外是for循環(huán)的索引變量 for (int i = 0; i < maxLoops; i+) . 避免聲明的局部變量覆蓋上一級聲明的變量。例如,不要在內(nèi)部代碼塊中聲明相同的變量名: int count; . myMethod() if (condition) int count = 0; / AV
37、OID! . . 3.6.4 類和接口的聲明(Class and Interface Declarations)當(dāng)編寫類和接口是,應(yīng)該遵守以下格式規(guī)則:- 在方法名與其參數(shù)列表之前的左括號"("間不要有空格- 左大括號""位于聲明語句同行的末尾- 右大括號""另起一行,與相應(yīng)的聲明語句對齊,除非是一個空語句,""應(yīng)緊跟在""之后 class Sample extends Object int ivar1; int ivar2; Sample(int i, int j) ivar1 = i; iv
38、ar2 = j; int emptyMethod() . - 方法與方法之間以空行分隔 3.7語句(Statements)3.7.1 簡單語句(Simple Statements)每行至多包含一條語句,例如: argv+; / Correct argc-; / Correct argv+; argc-; / AVOID!3.7.2 復(fù)合語句(Compound Statements)復(fù)合語句是包含在大括號中的語句序列,形如" 語句 "。例如下面各段。- 被括其中的語句應(yīng)該較之復(fù)合語句縮進一個層次- 左大括號""應(yīng)位于復(fù)合語句起始行的行尾;右大括號"
39、;"應(yīng)另起一行并與復(fù)合語句首行對齊。- 大括號可以被用于所有語句,包括單個語句,只要這些語句是諸如if-else或for控制結(jié)構(gòu)的一部分。這樣便于添加語句而無需擔(dān)心由于忘了加括號而引入bug。 3.7.3 返回語句(return Statements)一個帶返回值的return語句不使用小括號"()",除非它們以某種方式使返回值更為顯見。例如: return; return myDisk.size(); return (size ? size : defaultSize); 3.7.4 if,if-else,if else-if else語句if-else語句應(yīng)該
40、具有如下格式: if (condition) statements; if (condition) statements; else statements; if (condition) statements; else if (condition) statements; else statements; 注意:if語句總是用""和""符號括起來,避免使用如下容易引起錯誤的格式: if (condition) /AVOID! THIS OMITS THE BRACES ! statement;3.7.5 for語句(for Statements)一個f
41、or語句應(yīng)該具有如下格式: for (initialization; condition; update) statements; 一個空的for語句(所有工作都在初始化,條件判斷,更新子句中完成)應(yīng)該具有如下格式: for (initialization; condition; update);當(dāng)在for語句的初始化或更新子句中使用逗號時,避免因使用三個以上變量,而導(dǎo)致復(fù)雜度提高。若需要,可以在for循環(huán)之前(為初始化子句)或for循環(huán)末尾(為更新子句)使用單獨的語句。3.7.6 while語句(while Statements)一個while語句應(yīng)該具有如下格式 while (condit
42、ion) statements; 一個空的while語句應(yīng)該具有如下格式: while (condition); 3.7.7 do-while語句(do-while Statements)一個do-while語句應(yīng)該具有如下格式: do statements; while (condition); 3.7.8 switch語句(switch Statements)一個switch語句應(yīng)該具有如下格式: switch (condition) case ABC: statements; /* falls through */ case DEF: statements; break; case XY
43、Z: statements; break; default: statements; break; 每當(dāng)一個case順著往下執(zhí)行時(因為沒有break語句),通常應(yīng)在break語句的位置添加注釋。上面的示例代碼中就包含注釋/* falls through */。3.7.9 try-catch語句(try-catch Statements)一個try-catch語句應(yīng)該具有如下格式: try statements; catch (ExceptionClass e) statements; 一個try-catch語句后面也可能跟著一個finally語句,不論try代碼塊是否順利執(zhí)行完,它都會被執(zhí)行
44、。 try statements; catch (ExceptionClass e) statements; finally statements; 3.8空白(White Space)3.8.1 空行(Blank Lines)空行將邏輯相關(guān)的代碼段分隔開,以提高可讀性。下列情況應(yīng)該總是使用兩個空行:- 一個源文件的兩個片段(section)之間- 類聲明和接口聲明之間 下列情況應(yīng)該總是使用一個空行:- 兩個方法之間- 方法內(nèi)的局部變量和方法的第一條語句之間- 塊注釋(參見"3.1.1")或單行注釋(參見"3.1.2")之前- 一個方法內(nèi)的兩個邏輯段之間
45、,用以提高可讀性 3.8.2 空格(Blank Spaces)下列情況應(yīng)該使用空格:- 一個緊跟著括號的關(guān)鍵字應(yīng)該被空格分開,例如: while (true) . 注意:空格不應(yīng)該置于方法名與其左括號之間。這將有助于區(qū)分關(guān)鍵字和方法調(diào)用。- 空白應(yīng)該位于參數(shù)列表中逗號的后面- 所有的二元運算符,除了".",應(yīng)該使用空格將之與操作數(shù)分開。一元操作符和操作數(shù)之間不因該加空格,比如:負號("-")、自增("+")和自減("-")。例如: a += c + d; a = (a + b) / (c * d); while (
46、d+ = s+) n+; printSize("size is " + foo + "n"); - for語句中的表達式應(yīng)該被空格分開,例如: for (expr1; expr2; expr3) - 強制轉(zhuǎn)型后應(yīng)該跟一個空格,例如: myMethod(byte) aNum, (Object) x); myMethod(int) (cp + 5), (int) (i + 3) + 1); 3.9命名規(guī)范(Naming Conventions)命名規(guī)范使程序更易讀,從而更易于理解。它們也可以提供一些有關(guān)標識符功能的信息,以助于理解代碼,例如,不論它是一個常量
47、,包,還是類。標識符類型命名規(guī)則例子包(Packages)一個唯一包名的前綴總是全部小寫的ASCII字母并且是一個頂級域名,通常是com,edu,gov,mil,net,org,或1981年ISO 3166標準所指定的標識國家的英文雙字符代碼。包名的后續(xù)部分根據(jù)不同機構(gòu)各自內(nèi)部的命名規(guī)范而不盡相同。這類命名規(guī)范可能以特定目錄名的組成來區(qū)分部門(department),項目(project),機器(machine),或注冊名(login names)。com.sun.engcom.apple.quicktime.v2edu.cmu.cs.bovik.cheese類(Classes)命名規(guī)則:類名
48、是個一名詞,采用大小寫混合的方式,每個單詞的首字母大寫。盡量使你的類名簡潔而富于描述。使用完整單詞,避免縮寫詞(除非該縮寫詞被更廣泛使用,像URL,HTML)class Raster;class ImageSprite;接口(Interfaces)命名規(guī)則:大小寫規(guī)則與類名相似interface RasterDelegate;interface Storing;方法(Methods)方法名是一個動詞,采用大小寫混合的方式,第一個單詞的首字母小寫,其后單詞的首字母大寫。run();runFast();getBackground();變量(Variables)除了變量名外,所有實例,包括類,類常量
49、,均采用大小寫混合的方式,第一個單詞的首字母小寫,其后單詞的首字母大寫。變量名不應(yīng)以下劃線或美元符號開頭,盡管這在語法上是允許的。變量名應(yīng)簡短且富于描述。變量名的選用應(yīng)該易于記憶,即,能夠指出其用途。盡量避免單個字符的變量名,除非是一次性的臨時變量。臨時變量通常被取名為i,j,k,m和n,它們一般用于整型;c,d,e,它們一般用于字符型。char c;int i;float myWidth;實例變量(Instance Variables)大小寫規(guī)則和變量名相似,除了前面需要一個下劃線int _employeeId;String _name;Customer _customer;常量(Const
50、ants)類常量和ANSI常量的聲明,應(yīng)該全部大寫,單詞間用下劃線隔開。(盡量避免ANSI常量,容易引起錯誤)static final int MIN_WIDTH = 4;static final int MAX_WIDTH = 999;static final int GET_THE_CPU = 1;3.10編程慣例(Programming Practices)3.10.1 提供對實例以及類變量的訪問控制(Providing Access to Instance and Class Variables)若沒有足夠理由,不要把實例或類變量聲明為公有。通常,實例變量無需顯式的設(shè)置(set)和獲取(gotten),通常這作為方法調(diào)用的邊緣效應(yīng) (side effect)而產(chǎn)生。一個具有公有實例變量的恰當(dāng)例子,是類僅作為數(shù)據(jù)結(jié)構(gòu),沒有行為。亦即,若你要使用一個結(jié)構(gòu)(struct)而非一個類(如果java支持結(jié)構(gòu)的話),那么把類的實例變量聲明為公有是合適的。3.10.2 引用類變量和類方法(Referring to Class Variables and Methods)避免用一個對象訪問一個類的靜態(tài)變量和方法。應(yīng)該用類名替代。例如: classMethod(); /OK AClass.
溫馨提示
- 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)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國高溫高壓液流染色機市場分析及競爭策略研究報告
- 2025至2030年中國金銀紀念章市場分析及競爭策略研究報告
- 2025至2030年中國調(diào)節(jié)螺栓滑塊市場分析及競爭策略研究報告
- 2025至2030年中國白銅錫退鍍主鹽市場分析及競爭策略研究報告
- 2025至2030年中國涂布機械換熱器市場分析及競爭策略研究報告
- 2025至2030年中國毛石銅面磚市場分析及競爭策略研究報告
- 2025至2030年中國春繡球茶市場分析及競爭策略研究報告
- 2025至2030年中國手持式折射計市場分析及競爭策略研究報告
- 2025至2030年中國塑膠改質(zhì)劑市場分析及競爭策略研究報告
- 2025至2030年中國雙錐臥式珠磨機市場分析及競爭策略研究報告
- 2025年廣東省高考地理試卷真題(含答案)
- 2025年湖北省中考英語試題(附答案)
- Unit 1 Happy Holiday 第4課時(Section B 1a-1d) 2025-2026學(xué)年人教版英語八年級下冊
- 2025年連云港市中考語文試卷真題(含標準答案及解析)
- 2025-2030年中國期貨行業(yè)市場深度調(diào)研及競爭格局與投資策略研究報告
- 2025-2030年中國農(nóng)業(yè)科技行業(yè)市場深度調(diào)研及前景趨勢與投資研究報告
- 2025年高考語文真題作文深度分析之全國二卷作文寫作講解
- 湖南省2025年農(nóng)村訂單定向本科醫(yī)學(xué)生培養(yǎng)定向就業(yè)協(xié)議書、健康承諾書、資格審核表
- 中醫(yī)優(yōu)才試題及答案
- 細胞庫建立管理制度
- AR眼鏡的用戶界面設(shè)計準則-洞察闡釋
評論
0/150
提交評論