Java代碼編寫規(guī)范_第1頁
Java代碼編寫規(guī)范_第2頁
Java代碼編寫規(guī)范_第3頁
Java代碼編寫規(guī)范_第4頁
Java代碼編寫規(guī)范_第5頁
已閱讀5頁,還剩52頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、JAVAJAVA代碼規(guī)范代碼規(guī)范版權(quán)所有為什么要有編碼規(guī)范為什么要有編碼規(guī)范 編碼規(guī)范對(duì)于程序員而言尤為重要,有以下幾個(gè)原因編碼規(guī)范對(duì)于程序員而言尤為重要,有以下幾個(gè)原因: - 一個(gè)軟件的生命周期中,一個(gè)軟件的生命周期中,80%的花費(fèi)在于維護(hù)的花費(fèi)在于維護(hù)- 幾乎沒有任何一個(gè)軟件,在其整個(gè)生命周期中,均由幾乎沒有任何一個(gè)軟件,在其整個(gè)生命周期中,均由最初的開發(fā)人員來維護(hù)最初的開發(fā)人員來維護(hù)- 編碼規(guī)范可以改善軟件的可讀性,可以讓程序員盡快編碼規(guī)范可以改善軟件的可讀性,可以讓程序員盡快而徹底地理解新的代碼而徹底地理解新的代碼- 如果你將源碼作為產(chǎn)品發(fā)布,就需要確任它是否被很如果你將源碼作為產(chǎn)品發(fā)

2、布,就需要確任它是否被很好的打包并且清晰無誤。好的打包并且清晰無誤。文件后綴文件后綴 Java程序使用下列文件后綴:程序使用下列文件后綴: 文件類別 文件后綴 Java源文件源文件 .java Java字節(jié)碼文件字節(jié)碼文件 .class文件組織文件組織 一個(gè)文件由被空行分割而成的段落以及標(biāo)識(shí)每一個(gè)文件由被空行分割而成的段落以及標(biāo)識(shí)每個(gè)段落的可選注釋共同組成個(gè)段落的可選注釋共同組成 超過超過2000行的程序難以閱讀,應(yīng)該盡量避免行的程序難以閱讀,應(yīng)該盡量避免 每個(gè)每個(gè)Java源文件都包含一個(gè)單一的公共類或接源文件都包含一個(gè)單一的公共類或接口口.若私有類和接口與一個(gè)公共類相關(guān)聯(lián),可以若私有類和接口

3、與一個(gè)公共類相關(guān)聯(lián),可以將它們和公共類放入同一個(gè)源文件。公共類必將它們和公共類放入同一個(gè)源文件。公共類必須是這個(gè)文件中的第一個(gè)類或接口。須是這個(gè)文件中的第一個(gè)類或接口。 開頭注釋開頭注釋 所有的源文件都應(yīng)該在開頭有一個(gè)所有的源文件都應(yīng)該在開頭有一個(gè)C語言風(fēng)格的注釋,語言風(fēng)格的注釋,其中列出類名、版本信息、日期和版權(quán)聲明其中列出類名、版本信息、日期和版權(quán)聲明 ,例如:例如: /* * Classname * * Version info * * Copyright notice */縮進(jìn)排版縮進(jìn)排版 4個(gè)空格常被作為縮進(jìn)排版的一個(gè)單位??s進(jìn)的確切解釋并未詳個(gè)空格常被作為縮進(jìn)排版的一個(gè)單位。縮進(jìn)的

4、確切解釋并未詳細(xì)指定細(xì)指定(空格空格 vs. 制表符制表符)。一個(gè)制表符等于。一個(gè)制表符等于8個(gè)空格個(gè)空格(而非而非4個(gè)個(gè))。 行長度 盡量避免一行的長度超過盡量避免一行的長度超過80個(gè)字符,因?yàn)楹芏嘟K端和個(gè)字符,因?yàn)楹芏嘟K端和 工具不能工具不能很好處理之。很好處理之。 注意 用于文檔中的例子應(yīng)該使用更短的行長,長度一般不超過用于文檔中的例子應(yīng)該使用更短的行長,長度一般不超過70個(gè)字個(gè)字符符 換行換行 當(dāng)一個(gè)表達(dá)式無法容納在一行內(nèi)時(shí),可以依據(jù)如下一當(dāng)一個(gè)表達(dá)式無法容納在一行內(nèi)時(shí),可以依據(jù)如下一般規(guī)則斷開之:般規(guī)則斷開之: - 在一個(gè)逗號(hào)后面斷開在一個(gè)逗號(hào)后面斷開- 在一個(gè)操作符前面斷開在一個(gè)操

5、作符前面斷開- 寧可選擇較高級(jí)別寧可選擇較高級(jí)別(higher-level)的斷開,而非較低級(jí)的斷開,而非較低級(jí)別別(lower-level)的斷開的斷開- 新的一行應(yīng)該與上一行同一級(jí)別表達(dá)式的開頭處對(duì)齊新的一行應(yīng)該與上一行同一級(jí)別表達(dá)式的開頭處對(duì)齊- 如果以上規(guī)則導(dǎo)致你的代碼混亂或者使你的代碼都堆如果以上規(guī)則導(dǎo)致你的代碼混亂或者使你的代碼都堆擠在右邊,那就代之以縮進(jìn)擠在右邊,那就代之以縮進(jìn)8個(gè)空格。個(gè)空格。 換行(例子)換行(例子)以下是斷開方法調(diào)用的一些例子:以下是斷開方法調(diào)用的一些例子:function(longExpression1, longExpression2, longExpr

6、ession3, longExpression4, longExpression5); var = function1(longExpression1, function2(longExpression2, longExpression3);斷開方法調(diào)用的一些例子斷開方法調(diào)用的一些例子 if語句的換行通常使用8個(gè)空格的規(guī)則,因?yàn)槌R?guī)縮進(jìn)(4個(gè)空格)會(huì)使語句體看起來比較費(fèi)勁,例如: if (condition1 & condition2) | (condition3 & condition4) |!(condition5 & condition6) /BAD WRAPS

7、doSomethingAboutIt(); /MAKE THIS LINE EASY TO MISS斷開方法調(diào)用的一些例子斷開方法調(diào)用的一些例子推薦使用如下的斷開方式推薦使用如下的斷開方式 if (condition1 & condition2) | (condition3 & condition4) | ! (condition5 & condition6) doSomethingAboutIt();/或者使用如下方式 if (condition1 & condition2) | (condition3 & condition4) | ! (condi

8、tion5 & condition6) doSomethingAboutIt();注釋注釋 注釋應(yīng)被用來給出代碼的總括,并提供代碼自注釋應(yīng)被用來給出代碼的總括,并提供代碼自身沒有提供的附加信息。身沒有提供的附加信息。注釋應(yīng)該僅包含與閱讀和理解程序有關(guān)的信息注釋應(yīng)該僅包含與閱讀和理解程序有關(guān)的信息。例如,相應(yīng)的包如何被建立或位于哪個(gè)目錄。例如,相應(yīng)的包如何被建立或位于哪個(gè)目錄下之類的信息不應(yīng)包括在注釋中下之類的信息不應(yīng)包括在注釋中注釋注釋Java程序有兩類注釋:實(shí)現(xiàn)注釋和文檔注釋。程序有兩類注釋:實(shí)現(xiàn)注釋和文檔注釋。 實(shí)現(xiàn)注釋是那些在實(shí)現(xiàn)注釋是那些在C+中見過的,使用中見過的,使用/*.

9、*/和和/界界定的注釋定的注釋 文檔注釋是文檔注釋是Java獨(dú)有的,并由獨(dú)有的,并由/*.*/界定。文檔注釋界定。文檔注釋可以通過可以通過javadoc工具轉(zhuǎn)換成工具轉(zhuǎn)換成HTML文件文件 。 文檔注釋從實(shí)現(xiàn)自由的角度描述代碼的規(guī)范。它可以文檔注釋從實(shí)現(xiàn)自由的角度描述代碼的規(guī)范。它可以被那些手頭沒有源碼的開發(fā)人員讀懂。被那些手頭沒有源碼的開發(fā)人員讀懂。 注釋注釋注釋應(yīng)被用來給出代碼的總括,并提供代碼自身沒有提供的附加注釋應(yīng)被用來給出代碼的總括,并提供代碼自身沒有提供的附加信息。在注釋里,對(duì)設(shè)計(jì)決策中重要的或者不是顯而易見的地方信息。在注釋里,對(duì)設(shè)計(jì)決策中重要的或者不是顯而易見的地方進(jìn)行說明是可

10、以的,但應(yīng)避免提供代碼中己清晰表達(dá)出來的重復(fù)進(jìn)行說明是可以的,但應(yīng)避免提供代碼中己清晰表達(dá)出來的重復(fù)信息。多余的的注釋很容易過時(shí)。通常應(yīng)避免那些代碼更新就可信息。多余的的注釋很容易過時(shí)。通常應(yīng)避免那些代碼更新就可能過時(shí)的注釋。能過時(shí)的注釋。注意:頻繁的注釋有時(shí)反映出代碼的低質(zhì)量。當(dāng)你覺得被迫要加注意:頻繁的注釋有時(shí)反映出代碼的低質(zhì)量。當(dāng)你覺得被迫要加注釋的時(shí)候,考慮一下重寫代碼使其更清晰。注釋的時(shí)候,考慮一下重寫代碼使其更清晰。注釋不應(yīng)寫在用星號(hào)或其他字符畫出來的大框里。注釋不應(yīng)包括注釋不應(yīng)寫在用星號(hào)或其他字符畫出來的大框里。注釋不應(yīng)包括諸如制表符和回退符之類的特殊字符。諸如制表符和回退符之類

11、的特殊字符。實(shí)現(xiàn)注釋的格式實(shí)現(xiàn)注釋的格式 程序可以有程序可以有4種實(shí)現(xiàn)注釋的風(fēng)格:種實(shí)現(xiàn)注釋的風(fēng)格: 塊塊 單行單行 尾端尾端 行末行末 塊注釋塊注釋 塊注釋通常用于提供對(duì)文件,方法,數(shù)據(jù)結(jié)構(gòu)和算法的描述。塊塊注釋通常用于提供對(duì)文件,方法,數(shù)據(jù)結(jié)構(gòu)和算法的描述。塊注釋被置于每個(gè)文件的開始處以及每個(gè)方法之前。它們也可以被注釋被置于每個(gè)文件的開始處以及每個(gè)方法之前。它們也可以被用于其他地方,比如方法內(nèi)部。在功能和方法內(nèi)部的塊注釋應(yīng)該用于其他地方,比如方法內(nèi)部。在功能和方法內(nèi)部的塊注釋應(yīng)該和它們所描述的代碼具有一樣的縮進(jìn)格式和它們所描述的代碼具有一樣的縮進(jìn)格式塊注釋之首應(yīng)該有一個(gè)空行,用于把塊注釋和

12、代碼分割開來。塊塊注釋之首應(yīng)該有一個(gè)空行,用于把塊注釋和代碼分割開來。塊注釋可以以注釋可以以/*-開頭,這樣開頭,這樣indent(1)就可以將之識(shí)別為一個(gè)代碼塊就可以將之識(shí)別為一個(gè)代碼塊的開始,而不會(huì)重排它比如:的開始,而不會(huì)重排它比如: /* * Here is a block comment. */單行注釋單行注釋短注釋可以顯示在一行內(nèi),并與其后的代碼具有一樣的縮進(jìn)層級(jí)短注釋可以顯示在一行內(nèi),并與其后的代碼具有一樣的縮進(jìn)層級(jí) 如果一個(gè)注釋不能在一行內(nèi)寫完,就該采用塊注釋如果一個(gè)注釋不能在一行內(nèi)寫完,就該采用塊注釋 單行注釋之前應(yīng)該有一個(gè)空行單行注釋之前應(yīng)該有一個(gè)空行 以下是一個(gè)以下是一個(gè)

13、Java代碼中單行注釋的例子代碼中單行注釋的例子 if (condition) /* Handle the condition. */ . 尾端注釋尾端注釋極短的注釋可以與它們所要描述的代碼位于同一行,但是應(yīng)該有極短的注釋可以與它們所要描述的代碼位于同一行,但是應(yīng)該有足夠的空白來分開代碼和注釋足夠的空白來分開代碼和注釋若有多個(gè)短注釋出現(xiàn)于大段代碼中,它們應(yīng)該具有相同的縮進(jìn)若有多個(gè)短注釋出現(xiàn)于大段代碼中,它們應(yīng)該具有相同的縮進(jìn)以下是一個(gè)以下是一個(gè)Java代碼中尾端注釋的例子代碼中尾端注釋的例子 if (a = 2) return TRUE; /* special case */ else ret

14、urn isprime(a); /* works only for odd a */ 行末注釋行末注釋注釋界定符注釋界定符/,可以注釋掉整行或者一行中,可以注釋掉整行或者一行中的一部分的一部分它一般不用于連續(xù)多行的注釋文本;然而,它它一般不用于連續(xù)多行的注釋文本;然而,它可以用來注釋掉連續(xù)多行的代碼段可以用來注釋掉連續(xù)多行的代碼段三種風(fēng)格的例子三種風(fēng)格的例子if (foo 1) / Do a double-flip.elsereturn false; / Explain why here./if (bar 1) / / Do a triple-flip./ ./else/ return fal

15、se;文檔注釋文檔注釋若想了解更多,參見若想了解更多,參見How to Write Doc Comments for Javadoc,其中包含了有關(guān)文檔注釋標(biāo)記的信息,其中包含了有關(guān)文檔注釋標(biāo)記的信息(return, param, see)http:/ The Example class provides .*/public class Example .注意頂層注意頂層(top-level)的類和接口是不縮進(jìn)的,而其成員是縮進(jìn)的。描述類和接的類和接口是不縮進(jìn)的,而其成員是縮進(jìn)的。描述類和接 口的文檔注釋的第一行口的文檔注釋的第一行(/*)不需縮進(jìn);隨后的文檔注釋每行都縮進(jìn)不需縮進(jìn);隨后的文檔

16、注釋每行都縮進(jìn)1格格(使星號(hào)使星號(hào) 縱向?qū)R縱向?qū)R)。成員,包括構(gòu)造函數(shù)在內(nèi),其文檔注釋的第一行縮進(jìn)。成員,包括構(gòu)造函數(shù)在內(nèi),其文檔注釋的第一行縮進(jìn)4格,隨后每格,隨后每 行都縮進(jìn)行都縮進(jìn)5格。格。若你想給出有關(guān)類、接口、變量或方法的信息,而這些信息又不適合寫在文若你想給出有關(guān)類、接口、變量或方法的信息,而這些信息又不適合寫在文 檔中,則可使用實(shí)現(xiàn)塊注釋檔中,則可使用實(shí)現(xiàn)塊注釋(見見5.1.1)或緊跟在聲明后面的單行注釋或緊跟在聲明后面的單行注釋(見見5.1.2)。 例如,有關(guān)一個(gè)類實(shí)現(xiàn)的細(xì)節(jié),應(yīng)放入緊跟在類聲明后面的實(shí)現(xiàn)塊注釋中,例如,有關(guān)一個(gè)類實(shí)現(xiàn)的細(xì)節(jié),應(yīng)放入緊跟在類聲明后面的實(shí)現(xiàn)塊注

17、釋中, 而不是放在文檔注釋中。而不是放在文檔注釋中。 文檔注釋不能放在一個(gè)方法或構(gòu)造器的定義塊中,因?yàn)槲臋n注釋不能放在一個(gè)方法或構(gòu)造器的定義塊中,因?yàn)镴ava會(huì)將位于文檔注釋會(huì)將位于文檔注釋 之后的第一個(gè)聲明與其相關(guān)聯(lián)之后的第一個(gè)聲明與其相關(guān)聯(lián)聲明聲明推薦一行一個(gè)聲明,因?yàn)檫@樣以利于寫注釋,推薦一行一個(gè)聲明,因?yàn)檫@樣以利于寫注釋,例如:例如: int level; / indentation level int size; / size of table 要優(yōu)于要優(yōu)于 int level, size;聲明聲明不要將不同類型變量的聲明放在同一行,例如:不要將不同類型變量的聲明放在同一行,例如:

18、int foo, fooarray; /WRONG!注意:上面的例子中,在類型和標(biāo)識(shí)符之間放了一個(gè)注意:上面的例子中,在類型和標(biāo)識(shí)符之間放了一個(gè)空格,另一種被允許的替代方式是使用制表符:空格,另一種被允許的替代方式是使用制表符: int level; / indentation level int size; / size of table Object currentEntry; / currently selected table entry布局布局只在代碼塊的開始處聲明變量。(一個(gè)塊是指任何被包含在大括號(hào)只在代碼塊的開始處聲明變量。(一個(gè)塊是指任何被包含在大括號(hào)和和中間的中間的代碼。)代

19、碼。)不要在首次用到該變量時(shí)才聲明之。這會(huì)把注意力不集中的程序員搞糊涂,同時(shí)不要在首次用到該變量時(shí)才聲明之。這會(huì)把注意力不集中的程序員搞糊涂,同時(shí)會(huì)妨礙代碼在該作用域內(nèi)的可移植性。會(huì)妨礙代碼在該作用域內(nèi)的可移植性。 void myMethod() int int1 = 0; / beginning of method block if (condition) int int2 = 0; / beginning of if block . 該規(guī)則的一個(gè)例外是該規(guī)則的一個(gè)例外是for循環(huán)的索引變量循環(huán)的索引變量 for (int i = 0; i maxLoops; i+) . 布局布局避免聲明的

20、局部變量覆蓋上一級(jí)聲明的變量。例如,不要在內(nèi)部避免聲明的局部變量覆蓋上一級(jí)聲明的變量。例如,不要在內(nèi)部代碼塊中聲明相同的變量名:代碼塊中聲明相同的變量名: int count; . myMethod() if (condition) int count = 0; / AVOID! . . 初始化初始化盡量在聲明局部變量的同時(shí)初始化。唯一不這盡量在聲明局部變量的同時(shí)初始化。唯一不這么做的理由是變量的初始值依賴于某些先前發(fā)么做的理由是變量的初始值依賴于某些先前發(fā)生的計(jì)算。生的計(jì)算。類和接口的聲明類和接口的聲明當(dāng)編寫類和接口時(shí),應(yīng)該遵守以下格式規(guī)則:當(dāng)編寫類和接口時(shí),應(yīng)該遵守以下格式規(guī)則: - 在方

21、法名與其參數(shù)列表之前的左括號(hào)在方法名與其參數(shù)列表之前的左括號(hào)(間不要間不要有空格有空格 - 左大括號(hào)左大括號(hào)位于聲明語句同行的末尾位于聲明語句同行的末尾 - 右大括號(hào)右大括號(hào)“”另起一行,與相應(yīng)的聲明語句對(duì)另起一行,與相應(yīng)的聲明語句對(duì)齊,除非是一個(gè)空語句,齊,除非是一個(gè)空語句,“”應(yīng)緊應(yīng)緊 跟在跟在“”之之后后 -方法與方法之間以空行分隔方法與方法之間以空行分隔類和接口的聲明類和接口的聲明 class Sample extends Object int ivar1; int ivar2; Sample(int i, int j) ivar1 = i; ivar2 = j; int emptyM

22、ethod() . 語句語句簡單語句簡單語句 每行至多包含一條語句,例如:每行至多包含一條語句,例如: argv+; / Correct argc-; / Correct argv+; argc-; / AVOID!復(fù)合語句復(fù)合語句復(fù)合語句是包含在大括號(hào)中的語句序列,形如復(fù)合語句是包含在大括號(hào)中的語句序列,形如 語句語句 。例如下面各段。例如下面各段。 - 被括其中的語句應(yīng)該較之復(fù)合語句縮進(jìn)一個(gè)層次被括其中的語句應(yīng)該較之復(fù)合語句縮進(jìn)一個(gè)層次 - 左大括號(hào)左大括號(hào)應(yīng)位于復(fù)合語句起始行的行尾;右大括應(yīng)位于復(fù)合語句起始行的行尾;右大括號(hào)號(hào)應(yīng)另起一行并與復(fù)合語句首行對(duì)齊。應(yīng)另起一行并與復(fù)合語句首行對(duì)齊

23、。 - 大括號(hào)可以被用于所有語句,包括單個(gè)語句,只要這大括號(hào)可以被用于所有語句,包括單個(gè)語句,只要這些語句是諸如些語句是諸如if-else或或for控制結(jié)構(gòu)的一部分。這樣便于控制結(jié)構(gòu)的一部分。這樣便于添加語句而無需擔(dān)心由于忘了加括號(hào)而引入添加語句而無需擔(dān)心由于忘了加括號(hào)而引入bug。返回語句返回語句一個(gè)帶返回值的一個(gè)帶返回值的return語句不使用小括號(hào)語句不使用小括號(hào)(),除非它們以某種方式使返回值更為顯見。例如除非它們以某種方式使返回值更為顯見。例如: return; return myDisk.size(); return (size ? size : defaultSize);if,i

24、f-else,if else-if else語句語句(if, if-else, if else-if else Statements)if-else語句應(yīng)該具有如下格式:語句應(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 e

25、lse Statements)注意:注意:if語句總是用語句總是用和和括起來,避免使用如下容括起來,避免使用如下容易引起錯(cuò)誤的格式:易引起錯(cuò)誤的格式: if (condition) /AVOID! THIS OMITS THEBRACES ! statement;空行空行空行將邏輯相關(guān)的代碼段分隔開,以提高可讀性??招袑⑦壿嬒嚓P(guān)的代碼段分隔開,以提高可讀性。u 下列情況應(yīng)該總是使用兩個(gè)空行:下列情況應(yīng)該總是使用兩個(gè)空行: - 一個(gè)源文件的兩個(gè)片段一個(gè)源文件的兩個(gè)片段(section)之間之間 - 類聲明和接口聲明之間類聲明和接口聲明之間u下列情況應(yīng)該總是使用一個(gè)空行:下列情況應(yīng)該總是使用一個(gè)空

26、行: - 兩個(gè)方法之間兩個(gè)方法之間 - 方法內(nèi)的局部變量和方法的第一條語句之間方法內(nèi)的局部變量和方法的第一條語句之間 - 塊注釋或單行注釋之前塊注釋或單行注釋之前 - 一個(gè)方法內(nèi)的兩個(gè)邏輯段之間,用以提高可讀性一個(gè)方法內(nèi)的兩個(gè)邏輯段之間,用以提高可讀性空格空格下列情況應(yīng)該使用空格:下列情況應(yīng)該使用空格:- 一個(gè)緊跟著括號(hào)的關(guān)鍵字應(yīng)該被空格分開,例如:一個(gè)緊跟著括號(hào)的關(guān)鍵字應(yīng)該被空格分開,例如:while (true) .注意:空格不應(yīng)該置于方法名與其左括號(hào)之間。這將有注意:空格不應(yīng)該置于方法名與其左括號(hào)之間。這將有助于區(qū)分關(guān)鍵字和方法調(diào)用。助于區(qū)分關(guān)鍵字和方法調(diào)用??崭窨崭? 空白應(yīng)該位于參數(shù)

27、列表中逗號(hào)的后面空白應(yīng)該位于參數(shù)列表中逗號(hào)的后面- 所有的二元運(yùn)算符,除了所有的二元運(yùn)算符,除了.,應(yīng)該使用空格將之與操作數(shù)分開。一,應(yīng)該使用空格將之與操作數(shù)分開。一元操作符和操作數(shù)之間不因該加空格,比如:負(fù)號(hào)元操作符和操作數(shù)之間不因該加空格,比如:負(fù)號(hào)(-)、自增、自增(+)和自減和自減(-)。例如:。例如: a += c + d; a = (a + b) / (c * d); while (d+ = s+) n+; printSize(size is + foo + n);空格空格- for語句中的表達(dá)式應(yīng)該被空格分開,例如:語句中的表達(dá)式應(yīng)該被空格分開,例如: for (expr1; e

28、xpr2; expr3)- 強(qiáng)制轉(zhuǎn)型后應(yīng)該跟一個(gè)空格,例如:強(qiáng)制轉(zhuǎn)型后應(yīng)該跟一個(gè)空格,例如: myMethod(byte) aNum, (Object) x); myMethod(int) (cp + 5), (int) (i + 3) + 1);命名規(guī)范命名規(guī)范命名規(guī)范使程序更易讀,從而更易于理解。它命名規(guī)范使程序更易讀,從而更易于理解。它們也可以提供一些有關(guān)標(biāo)識(shí)符功能的信息,以們也可以提供一些有關(guān)標(biāo)識(shí)符功能的信息,以助于理解代碼,例如,不論它是一個(gè)常量,包助于理解代碼,例如,不論它是一個(gè)常量,包,還是類。,還是類。命名規(guī)范(包)命名規(guī)范(包)一個(gè)唯一包名的前綴總是全部小寫的一個(gè)唯一包名的前

29、綴總是全部小寫的ASCII字母并且是字母并且是一個(gè)頂級(jí)域名,通常是一個(gè)頂級(jí)域名,通常是com,edu,gov,mil,net,org,或,或1981年年ISO3166標(biāo)準(zhǔn)所指定的標(biāo)識(shí)國家的英文標(biāo)準(zhǔn)所指定的標(biāo)識(shí)國家的英文雙字符代碼。包名的后續(xù)部分根據(jù)不同機(jī)構(gòu)各自內(nèi)部雙字符代碼。包名的后續(xù)部分根據(jù)不同機(jī)構(gòu)各自內(nèi)部的命名規(guī)范而不盡相同。這類命名規(guī)范可能以特定目的命名規(guī)范而不盡相同。這類命名規(guī)范可能以特定目錄名的組成來區(qū)分部門錄名的組成來區(qū)分部門(department),項(xiàng)目,項(xiàng)目(project),機(jī)器機(jī)器 (machine),或注冊名,或注冊名 (login names)。例如:。例如: com.

30、sun.eng com.apple.quicktime.v2 edu.cmu.cs.bovik.cheese命名規(guī)范(類)命名規(guī)范(類)類名是個(gè)一名詞,采用大小寫混合的方式,每類名是個(gè)一名詞,采用大小寫混合的方式,每個(gè)單詞的首字母大寫。盡量使你的類名簡潔而個(gè)單詞的首字母大寫。盡量使你的類名簡潔而富于描述。使用完整單詞,避免縮寫詞富于描述。使用完整單詞,避免縮寫詞(除非該除非該縮寫詞被更廣泛使用,像縮寫詞被更廣泛使用,像URL,HTML),例如,例如: class Raster; class ImageSprite;命名規(guī)范(接口)命名規(guī)范(接口)大小寫規(guī)則與類名相似大小寫規(guī)則與類名相似命名規(guī)范

31、(方法)命名規(guī)范(方法)方法名是一個(gè)動(dòng)詞,采用大小寫混合的方式第方法名是一個(gè)動(dòng)詞,采用大小寫混合的方式第一個(gè)單詞的首字母小寫,其后單詞的首字母大一個(gè)單詞的首字母小寫,其后單詞的首字母大寫,例如:寫,例如: run(); runFast(); getBackground();命名規(guī)范(變量)命名規(guī)范(變量)除了變量名外,所有實(shí)例,包括類,類常量,均采用除了變量名外,所有實(shí)例,包括類,類常量,均采用大小寫混合的方式,第一個(gè)單詞的首字母小寫,其后大小寫混合的方式,第一個(gè)單詞的首字母小寫,其后單詞的首字母大寫。變量名不應(yīng)以下劃線或美元符號(hào)單詞的首字母大寫。變量名不應(yīng)以下劃線或美元符號(hào)開頭,盡管這在語法

32、上是允許的。變量名應(yīng)簡短且富開頭,盡管這在語法上是允許的。變量名應(yīng)簡短且富于描述。變量名的選用應(yīng)該易于記憶,即,能夠指出于描述。變量名的選用應(yīng)該易于記憶,即,能夠指出其用途。盡量避免單個(gè)字符的變量名,除非是一次性其用途。盡量避免單個(gè)字符的變量名,除非是一次性的臨時(shí)變量。臨時(shí)變量通常被取名為的臨時(shí)變量。臨時(shí)變量通常被取名為i,j,k,m和和n,它們一般用于整型;它們一般用于整型;c,d,e,它們一般用于字符型。,它們一般用于字符型。命名規(guī)范(實(shí)例變量)命名規(guī)范(實(shí)例變量)大小寫規(guī)則和變量名相似,除了前面需要一個(gè)大小寫規(guī)則和變量名相似,除了前面需要一個(gè)下劃線下劃線命名規(guī)范(常量)命名規(guī)范(常量)類

33、常量和類常量和ANSI常量的聲明,應(yīng)該全部大寫,單常量的聲明,應(yīng)該全部大寫,單詞間用下劃線隔開。詞間用下劃線隔開。(盡量避免盡量避免ANSI常量,容易常量,容易引起錯(cuò)誤引起錯(cuò)誤)編程慣例編程慣例對(duì)實(shí)例以及類變量的訪問控制對(duì)實(shí)例以及類變量的訪問控制 若沒有足夠理由,不要把實(shí)例或類變量聲明為公有。若沒有足夠理由,不要把實(shí)例或類變量聲明為公有。通常,實(shí)例變量無需顯式的設(shè)置通常,實(shí)例變量無需顯式的設(shè)置(set)和獲取和獲取(gotten),通常這作為方法調(diào)用的邊緣效應(yīng)通常這作為方法調(diào)用的邊緣效應(yīng) (side effect)而產(chǎn)生。而產(chǎn)生。一個(gè)具有公有實(shí)例變量的恰當(dāng)例子,是類僅作為數(shù)據(jù)一個(gè)具有公有實(shí)例變

34、量的恰當(dāng)例子,是類僅作為數(shù)據(jù)結(jié)構(gòu),沒有行為。亦即,若你要使用一個(gè)結(jié)構(gòu)結(jié)構(gòu),沒有行為。亦即,若你要使用一個(gè)結(jié)構(gòu)(struct)而非一個(gè)類而非一個(gè)類(如果如果java支持結(jié)構(gòu)的話支持結(jié)構(gòu)的話),那么把類的實(shí)例,那么把類的實(shí)例變量聲明為公有是合適的變量聲明為公有是合適的編程慣例編程慣例引用類變量和類方法引用類變量和類方法 避免用一個(gè)對(duì)象訪問一個(gè)類的靜態(tài)變量和方法避免用一個(gè)對(duì)象訪問一個(gè)類的靜態(tài)變量和方法。應(yīng)該用類名替代。例如:。應(yīng)該用類名替代。例如: classMethod(); /OK AClass.classMethod(); /OK anObject.classMethod(); /AVOID!

35、編程慣例編程慣例常量常量 位于位于for循環(huán)中作為計(jì)數(shù)器值的數(shù)字常量,除了循環(huán)中作為計(jì)數(shù)器值的數(shù)字常量,除了-1,0和和1之外,不應(yīng)被直接寫入代碼。之外,不應(yīng)被直接寫入代碼。編程慣例編程慣例變量賦值變量賦值 避免在一個(gè)語句中給多個(gè)變量賦相同的值。它很難讀懂。例如:避免在一個(gè)語句中給多個(gè)變量賦相同的值。它很難讀懂。例如:fooBar.fChar = barFoo.lchar = c; / AVOID! 不要將賦值運(yùn)算符用在容易與相等關(guān)系運(yùn)算符混淆的地方。例如:不要將賦值運(yùn)算符用在容易與相等關(guān)系運(yùn)算符混淆的地方。例如: if (c+ = d+) / AVOID! (Java disallows)

36、. 應(yīng)該寫成應(yīng)該寫成 if (c+ = d+) != 0) . 編程慣例編程慣例不要使用內(nèi)嵌(embedded)賦值運(yùn)算符試圖提高運(yùn)行時(shí)的效率,這是編譯器的工作。例如: d = (a = b + c) + r; / AVOID! 應(yīng)該寫成 a = b + c; d = a + r;修改代碼時(shí)推薦使用的注釋修改代碼時(shí)推薦使用的注釋新添加的代碼新添加的代碼 /* added by username 2007-12-18 start */ /說明說明 code /* added by username 2007-12-18 end */刪除舊的代碼刪除舊的代碼 /* deleted by usern

37、ame 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源文件范例一源文件范例一下面的例子,展示了如何合理布局一個(gè)包含單一公共類的下面的例子,展示了如何合理布局一個(gè)包含單一公共類的Java源程序。接口的布局與其相似源程序。接口的布局與其相似 /* %W%

38、 %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 REPRESENTA

溫馨提示

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

評(píng)論

0/150

提交評(píng)論