Java代碼編寫規(guī)范.ppt_第1頁
Java代碼編寫規(guī)范.ppt_第2頁
Java代碼編寫規(guī)范.ppt_第3頁
Java代碼編寫規(guī)范.ppt_第4頁
Java代碼編寫規(guī)范.ppt_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

JAVA代碼規(guī)范,用友政務(wù)軟件有限公司 2009年12月,版權(quán)所有,編碼規(guī)范對于程序員而言尤為重要,有以下幾個原因: - 一個軟件的生命周期中,80%的花費在于維護(hù) - 幾乎沒有任何一個軟件,在其整個生命周期中,均由最初的開發(fā)人員來維護(hù) - 編碼規(guī)范可以改善軟件的可讀性,可以讓程序員盡快而徹底地理解新的代碼 - 如果你將源碼作為產(chǎn)品發(fā)布,就需要確任它是否被很好的打包并且清晰無誤。,文件后綴,Java程序使用下列文件后綴: 文件類別 文件后綴 Java源文件 .java Java字節(jié)碼文件 .class,文件組織,一個文件由被空行分割而成的段落以及標(biāo)識每個段落的可選注釋共同組成 超過2000行的程序難以閱讀,應(yīng)該盡量避免 每個Java源文件都包含一個單一的公共類或接口.若私有類和接口與一個公共類相關(guān)聯(lián),可以將它們和公共類放入同一個源文件。公共類必須是這個文件中的第一個類或接口。,開頭注釋,所有的源文件都應(yīng)該在開頭有一個C語言風(fēng)格的注釋,其中列出類名、版本信息、日期和版權(quán)聲明 ,例如: /* * Classname * * Version info * * Copyright notice */,縮進(jìn)排版,4個空格常被作為縮進(jìn)排版的一個單位??s進(jìn)的確切解釋并未詳細(xì)指定(空格 vs. 制表符)。一個制表符等于8個空格(而非4個)。 行長度 盡量避免一行的長度超過80個字符,因為很多終端和 工具不能很好處理之。 注意 用于文檔中的例子應(yīng)該使用更短的行長,長度一般不超過70個字符,換行,當(dāng)一個表達(dá)式無法容納在一行內(nèi)時,可以依據(jù)如下一般規(guī)則斷開之: - 在一個逗號后面斷開 - 在一個操作符前面斷開 - 寧可選擇較高級別(higher-level)的斷開,而非較低級別(lower-level)的斷開 - 新的一行應(yīng)該與上一行同一級別表達(dá)式的開頭處對齊 - 如果以上規(guī)則導(dǎo)致你的代碼混亂或者使你的代碼都堆擠在右邊,那就代之以縮進(jìn)8個空格。,換行(例子),以下是斷開方法調(diào)用的一些例子: function(longExpression1, longExpression2, longExpression3, longExpression4, longExpression5); var = function1(longExpression1, function2(longExpression2, longExpression3);,斷開方法調(diào)用的一些例子,if語句的換行通常使用8個空格的規(guī)則,因為常規(guī)縮進(jìn)(4個空格)會使語句體看起來比較費勁,例如: if (condition1 /MAKE THIS LINE EASY TO MISS ,斷開方法調(diào)用的一些例子,推薦使用如下的斷開方式 if (condition1 ,注釋,注釋應(yīng)被用來給出代碼的總括,并提供代碼自身沒有提供的附加信息。 注釋應(yīng)該僅包含與閱讀和理解程序有關(guān)的信息。例如,相應(yīng)的包如何被建立或位于哪個目錄下之類的信息不應(yīng)包括在注釋中,注釋,Java程序有兩類注釋:實現(xiàn)注釋和文檔注釋。 實現(xiàn)注釋是那些在C+中見過的,使用/*.*/和/界定的注釋 文檔注釋是Java獨有的,并由/*.*/界定。文檔注釋可以通過javadoc工具轉(zhuǎn)換成HTML文件 。 文檔注釋從實現(xiàn)自由的角度描述代碼的規(guī)范。它可以被那些手頭沒有源碼的開發(fā)人員讀懂。,注釋,注釋應(yīng)被用來給出代碼的總括,并提供代碼自身沒有提供的附加信息。在注釋里,對設(shè)計決策中重要的或者不是顯而易見的地方進(jìn)行說明是可以的,但應(yīng)避免提供代碼中己清晰表達(dá)出來的重復(fù)信息。多余的的注釋很容易過時。通常應(yīng)避免那些代碼更新就可能過時的注釋。 注意:頻繁的注釋有時反映出代碼的低質(zhì)量。當(dāng)你覺得被迫要加注釋的時候,考慮一下重寫代碼使其更清晰。 注釋不應(yīng)寫在用星號或其他字符畫出來的大框里。注釋不應(yīng)包括諸如制表符和回退符之類的特殊字符。,實現(xiàn)注釋的格式,程序可以有4種實現(xiàn)注釋的風(fēng)格: 塊 單行 尾端 行末,塊注釋,塊注釋通常用于提供對文件,方法,數(shù)據(jù)結(jié)構(gòu)和算法的描述。塊注釋被置于每個文件的開始處以及每個方法之前。它們也可以被用于其他地方,比如方法內(nèi)部。在功能和方法內(nèi)部的塊注釋應(yīng)該和它們所描述的代碼具有一樣的縮進(jìn)格式 塊注釋之首應(yīng)該有一個空行,用于把塊注釋和代碼分割開來。塊注釋可以以/*-開頭,這樣indent(1)就可以將之識別為一個代碼塊的開始,而不會重排它比如: /* * Here is a block comment. */,單行注釋,短注釋可以顯示在一行內(nèi),并與其后的代碼具有一樣的縮進(jìn)層級 如果一個注釋不能在一行內(nèi)寫完,就該采用塊注釋 單行注釋之前應(yīng)該有一個空行 以下是一個Java代碼中單行注釋的例子 if (condition) /* Handle the condition. */ . ,尾端注釋,極短的注釋可以與它們所要描述的代碼位于同一行,但是應(yīng)該有足夠的空白來分開代碼和注釋 若有多個短注釋出現(xiàn)于大段代碼中,它們應(yīng)該具有相同的縮進(jìn) 以下是一個Java代碼中尾端注釋的例子 if (a = 2) return TRUE; /* special case */ else return isprime(a); /* works only for odd a */ ,行末注釋,注釋界定符“/“,可以注釋掉整行或者一行中的一部分 它一般不用于連續(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 / return false;,文檔注釋,若想了解更多,參見“How to Write Doc Comments for Javadoc“,其中包含了有關(guān)文檔注釋標(biāo)記的信息(return, param, see) /javadoc/writingdoccomments/index.html 若想了解更多有關(guān)文檔注釋和javadoc的詳細(xì)資料,參見javadoc的主頁 /javadoc/index.html,文檔注釋,文檔注釋描述Java的類、接口、構(gòu)造器,方法,以及字段(field)。每個文檔注釋都會被置于注釋定界符/*.*/之中,一個注釋對應(yīng)一個類、接口或成員。該注釋應(yīng)位于聲明之前: /* * The Example class provides . */ public class Example . 注意頂層(top-level)的類和接口是不縮進(jìn)的,而其成員是縮進(jìn)的。描述類和接 口的文檔注釋的第一行(/*)不需縮進(jìn);隨后的文檔注釋每行都縮進(jìn)1格(使星號 縱向?qū)R)。成員,包括構(gòu)造函數(shù)在內(nèi),其文檔注釋的第一行縮進(jìn)4格,隨后每 行都縮進(jìn)5格。 若你想給出有關(guān)類、接口、變量或方法的信息,而這些信息又不適合寫在文 檔中,則可使用實現(xiàn)塊注釋(見5.1.1)或緊跟在聲明后面的單行注釋(見5.1.2)。 例如,有關(guān)一個類實現(xiàn)的細(xì)節(jié),應(yīng)放入緊跟在類聲明后面的實現(xiàn)塊注釋中, 而不是放在文檔注釋中。 文檔注釋不能放在一個方法或構(gòu)造器的定義塊中,因為Java會將位于文檔注釋 之后的第一個聲明與其相關(guān)聯(lián),聲明,推薦一行一個聲明,因為這樣以利于寫注釋,例如: int level; / indentation level int size; / size of table 要優(yōu)于 int level, size;,聲明,不要將不同類型變量的聲明放在同一行,例如: int foo, fooarray; /WRONG! 注意:上面的例子中,在類型和標(biāo)識符之間放了一個空格,另一種被允許的替代方式是使用制表符: int level; / indentation level int size; / size of table Object currentEntry; / currently selected table entry,布局,只在代碼塊的開始處聲明變量。(一個塊是指任何被包含在大括號“和“中間的代碼。) 不要在首次用到該變量時才聲明之。這會把注意力不集中的程序員搞糊涂,同時會妨礙代碼在該作用域內(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; / AVOID! . . ,初始化,盡量在聲明局部變量的同時初始化。唯一不這么做的理由是變量的初始值依賴于某些先前發(fā)生的計算。,類和接口的聲明,當(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; ivar2 = j; int emptyMethod() . ,語句,簡單語句 每行至多包含一條語句,例如: argv+; / Correct argc-; / Correct argv+; argc-; / AVOID!,復(fù)合語句,復(fù)合語句是包含在大括號中的語句序列,形如“ 語句 “。例如下面各段。 - 被括其中的語句應(yīng)該較之復(fù)合語句縮進(jìn)一個層次 - 左大括號“應(yīng)位于復(fù)合語句起始行的行尾;右大括號“應(yīng)另起一行并與復(fù)合語句首行對齊。 - 大括號可以被用于所有語句,包括單個語句,只要這些語句是諸如if-else或for控制結(jié)構(gòu)的一部分。這樣便于添加語句而無需擔(dān)心由于忘了加括號而引入bug。,返回語句,一個帶返回值的return語句不使用小括號“()“,除非它們以某種方式使返回值更為顯見。例如: return; return myDisk.size(); return (size ? size : defaultSize);,if,if-else,if else-if else語句(if, if-else, if else-if else Statements),if-else語句應(yīng)該具有如下格式: if (condition) statements; if (condition) statements; else statements; if (condition) statements; else if (condition) statements; else statements; ,if,if-else,if else-if else語句(if, if-else, if else-if else Statements),注意:if語句總是用“和“括起來,避免使用如下容易引起錯誤的格式: if (condition) /AVOID! THIS OMITS THEBRACES ! statement;,空行,空行將邏輯相關(guān)的代碼段分隔開,以提高可讀性。 下列情況應(yīng)該總是使用兩個空行: - 一個源文件的兩個片段(section)之間 - 類聲明和接口聲明之間 下列情況應(yīng)該總是使用一個空行: - 兩個方法之間 - 方法內(nèi)的局部變量和方法的第一條語句之間 - 塊注釋或單行注釋之前 - 一個方法內(nèi)的兩個邏輯段之間,用以提高可讀性,空格,下列情況應(yīng)該使用空格: - 一個緊跟著括號的關(guān)鍵字應(yīng)該被空格分開,例如: while (true) . 注意:空格不應(yīng)該置于方法名與其左括號之間。這將有助于區(qū)分關(guān)鍵字和方法調(diào)用。,空格,- 空白應(yīng)該位于參數(shù)列表中逗號的后面 - 所有的二元運算符,除了“.“,應(yīng)該使用空格將之與操作數(shù)分開。一元操作符和操作數(shù)之間不因該加空格,比如:負(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) - 強(qiáng)制轉(zhuǎn)型后應(yīng)該跟一個空格,例如: myMethod(byte) aNum, (Object) x); myMethod(int) (cp + 5), (int) (i + 3) + 1);,命名規(guī)范,命名規(guī)范使程序更易讀,從而更易于理解。它們也可以提供一些有關(guān)標(biāo)識符功能的信息,以助于理解代碼,例如,不論它是一個常量,包,還是類。,命名規(guī)范(包),一個唯一包名的前綴總是全部小寫的ASCII字母并且是一個頂級域名,通常是com,edu,gov,mil,net,org,或1981年ISO3166標(biāo)準(zhǔn)所指定的標(biāo)識國家的英文雙字符代碼。包名的后續(xù)部分根據(jù)不同機(jī)構(gòu)各自內(nèi)部的命名規(guī)范而不盡相同。這類命名規(guī)范可能以特定目錄名的組成來區(qū)分部門(department),項目(project),機(jī)器 (machine),或注冊名 (login names)。例如: com.sun.eng com.apple.quicktime.v2 edu.cmu.cs.bovik.cheese,命名規(guī)范(類),類名是個一名詞,采用大小寫混合的方式,每個單詞的首字母大寫。盡量使你的類名簡潔而富于描述。使用完整單詞,避免縮寫詞(除非該縮寫詞被更廣泛使用,像URL,HTML),例如: class Raster; class ImageSprite;,命名規(guī)范(接口),大小寫規(guī)則與類名相似,命名規(guī)范(方法),方法名是一個動詞,采用大小寫混合的方式第一個單詞的首字母小寫,其后單詞的首字母大寫,例如: run(); runFast(); getBackground();,命名規(guī)范(變量),除了變量名外,所有實例,包括類,類常量,均采用大小寫混合的方式,第一個單詞的首字母小寫,其后單詞的首字母大寫。變量名不應(yīng)以下劃線或美元符號開頭,盡管這在語法上是允許的。變量名應(yīng)簡短且富于描述。變量名的選用應(yīng)該易于記憶,即,能夠指出其用途。盡量避免單個字符的變量名,除非是一次性的臨時變量。臨時變量通常被取名為i,j,k,m和n,它們一般用于整型;c,d,e,它們一般用于字符型。,命名規(guī)范(實例變量),大小寫規(guī)則和變量名相似,除了前面需要一個下劃線,命名規(guī)范(常量),類常量和ANSI常量的聲明,應(yīng)該全部大寫,單詞間用下劃線隔開。(盡量避免ANSI常量,容易引起錯誤),編程慣例,對實例以及類變量的訪問控制 若沒有足夠理由,不要把實例或類變量聲明為公有。通常,實例變量無需顯式的設(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)的話),那么把類的實例變量聲明為公有是合適的,編程慣例,引用類變量和類方法 避免用一個對象訪問一個類的靜態(tài)變量和方法。應(yīng)該用類名替代。例如: classMethod(); /OK AClass.classMethod(); /OK anObject.classMethod(); /AVOID!,編程慣例,常量 位于for循環(huán)中作為計數(shù)器值的數(shù)字常量,除了-1,0和1之外,不應(yīng)被直接寫入代碼。,編程慣例,變量賦值 避免在一個語句中給多個變量賦相同的值。它很難讀懂。例如:fooBar.fChar = barFoo.lchar = c; / AVOID! 不要將賦值運算符用在容易與相等關(guān)系運算符混淆的地方。例如: if (c+ = d+) / AVOID! (Java disallows) . 應(yīng)該寫成 if (c+ = d+) != 0) . ,編程慣例,不要使用內(nèi)嵌(embedded)賦值運算符試圖提高運行時的效率,這是編譯器的工作。例如: d = (a = b + c) + r; / AVOID! 應(yīng)該寫成 a = b + c; d = a + r;,修改代碼時推薦使用的注釋,新添加的代碼 /* added by username 2007-12-18 start */ /說明 code /* added by username 2007-12-18 end */ 刪除舊的代碼 /* deleted by username 2007-12-18 start */ /說明 /old code /* deleted by username 2007-12-18 end*/ 修改舊的代碼 /* update by username 2007-12-18 start */ /說明 /old code new code /* update by username 2007-12-18 end */,Java源文件范例一,下面的例子,展示了如何合理布局一個包含單一公共類的Java源程序。接口的布局與其相似 /* * %W% %E% Firstname Lastname * * Copyright (c) 1993-1996 Sun Microsystems, Inc. All Rights Reserved. * * This software is the confidential and proprietary information of Sun * Microsystems, Inc. (“Confidential Information“). You shall not * disclose such Confidential Information and shall use it only in * accordance with the terms of the license agreement you entered into * with Sun. * * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED * TO THE IMPLIED WARRANTIE

溫馨提示

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

最新文檔

評論

0/150

提交評論