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

下載本文檔

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

文檔簡(jiǎn)介

1、1 介紹(Introduction)1.1 為什么要有編碼規(guī)范(Why Have Code Conventions)編碼規(guī)范對(duì)于程序員而言尤為重要,有以下幾個(gè)原因:(1)一個(gè)軟件的生命周期中,80%的花費(fèi)在于維護(hù)。(2)幾乎沒(méi)有任何一個(gè)軟件,在其整個(gè)生命周期中,均由最初的開(kāi)發(fā)人員來(lái)維護(hù)。(3)編碼規(guī)范可以改善軟件的可讀性,可以讓程序員盡快而徹底地理解新的代碼。(4)如果你將源碼作為產(chǎn)品發(fā)布,就需要確任它是否被很好的打包并且清晰無(wú)誤,一如你已構(gòu)建的其它任何產(chǎn)品。2 文件名(File Names)這部分列出了常用的文件名及其后綴。2.1 文件后綴(File Suffixes)Java程序使用下列文

2、件后綴:文件類別文件后綴Java源文件.javaJava字節(jié)碼文件.class2.2 常用文件名(Common File Names)常用的文件名包括:文件名用途GNUmakefilemakefiles的首選文件名。我們采用gnumake來(lái)創(chuàng)建(build)軟件。README概述特定目錄下所含內(nèi)容的文件的首選文件名3 文件組織(File Organization)一個(gè)文件由被空行分割而成的段落以及標(biāo)識(shí)每個(gè)段落的可選注釋共同組成。超過(guò)2000行的程序難以閱讀,應(yīng)該盡量避免。Java源文件范例提供了一個(gè)布局合理的Java程序范例。3.1 Java源文件(Java Source Files)每個(gè)Ja

3、va源文件都包含一個(gè)單一的公共類或接口。若私有類和接口與一個(gè)公共類相關(guān)聯(lián),可以將它們和公共類放入同一個(gè)源文件。公共類必須是這個(gè)文件中的第一個(gè)類或接口。Java源文件還遵循以下規(guī)則:(1)開(kāi)頭注釋(2)包和引入語(yǔ)句(3)類和接口聲明 開(kāi)頭注釋(Beginning Comments)所有的源文件都應(yīng)該在開(kāi)頭有一個(gè)C語(yǔ)言風(fēng)格的注釋,其中列出類名、版本信息、日期和版權(quán)聲明:/* * Classname* Version information* Date* Copyright notice*/ 包和引入語(yǔ)句(Package and Import Statements)在多數(shù)Java源文件中,第一個(gè)非注

4、釋行是包語(yǔ)句。在它之后可以跟引入語(yǔ)句。例如:package java.awt; 類和接口聲明(Class and Interface Declarations)下表描述了類和接口聲明的各個(gè)部分以及它們出現(xiàn)的先后次序。類/接口聲明的各部分注解1類/接口文檔注釋(/*/)該注釋中所需包含的信息2類或接口的聲明3類/接口實(shí)現(xiàn)的注釋(/*/)如果有必要的話該注釋?xiě)?yīng)包含任何有關(guān)整個(gè)類或接口的信息,而這些信息又不適合作為類/接口文檔注釋。4類的(靜態(tài))變量首先是類的公共變量,隨后是保護(hù)變量,再后是包一級(jí)別的變量(沒(méi)有訪問(wèn)修飾符,access modifier),最后是私有變量。5實(shí)例變量首先是公共級(jí)別的,

5、隨后是保護(hù)級(jí)別的,再后是包一級(jí)別的(沒(méi)有訪問(wèn)修飾符),最后是私有級(jí)別的。6構(gòu)造器7方法這些方法應(yīng)該按功能,而非作用域或訪問(wèn)權(quán)限,分組。例如,一個(gè)私有的類方法可以置于兩個(gè)公有的實(shí)例方法之間。其目的是為了更便于閱讀和理解代碼。4 縮進(jìn)排版(Indentation)4個(gè)空格常被作為縮進(jìn)排版的一個(gè)單位??s進(jìn)的確切解釋并未詳細(xì)指定(空格 vs. 制表符)。一個(gè)制表符等于8個(gè)空格(而非4個(gè))。4.1 行長(zhǎng)度(Line Length)盡量避免一行的長(zhǎng)度超過(guò)80個(gè)字符,因?yàn)楹芏嘟K端和工具不能很好處理之。注意:用于文檔中的例子應(yīng)該使用更短的行長(zhǎng),長(zhǎng)度一般不超過(guò)70個(gè)字符。4.2 換行(Wrapping Line

6、s)當(dāng)一個(gè)表達(dá)式無(wú)法容納在一行內(nèi)時(shí),可以依據(jù)如下一般規(guī)則斷開(kāi)之:(1)在一個(gè)逗號(hào)后面斷開(kāi)。(2)在一個(gè)操作符前面斷開(kāi)。(3)寧可選擇較高級(jí)別(higher-level)的斷開(kāi),而非較低級(jí)別(lower-level)的斷開(kāi)。(4)新的一行應(yīng)該與上一行同一級(jí)別表達(dá)式的開(kāi)頭處對(duì)齊。(5)如果以上規(guī)則導(dǎo)致你的代碼混亂或者使你的代碼都堆擠在右邊,那就代之以縮進(jìn)8個(gè)空格。 以下是斷開(kāi)方法調(diào)用的一些例子:someMethod(longExpression1, longExpression2, longExpression3, longExpression4, longExpression5);var = s

7、omeMethod1(longExpression1, someMethod2(longExpression2, longExpression3); 以下是兩個(gè)斷開(kāi)算術(shù)表達(dá)式的例子。前者更好,因?yàn)閿嚅_(kāi)處位于括號(hào)表達(dá)式的外邊,這是個(gè)較高級(jí)別的斷開(kāi)。longName1 = longName2 * (longName3 + longName4 - longName5) + 4 * longname6; /PREFFERlongName1 = longName2 * (longName3 + longName4 - longName5) + 4 * longname6; /AVOID以下是兩個(gè)縮進(jìn)方法

8、聲明的例子。前者是常規(guī)情形。后者若使用常規(guī)的縮進(jìn)方式將會(huì)使第二行和第三行移得很靠右,所以代之以縮進(jìn)8個(gè)空格/CONVENTIONAL INDENTATIONsomeMethod(int anArg, Object anotherArg, String yetAnotherArg, Object andStillAnother) . /INDENT 8 SPACES TO AVOID VERY DEEP INDENTSprivate static synchronized horkingLongMethodName(int anArg, Object anotherArg, String yet

9、AnotherArg, Object andStillAnother) .if語(yǔ)句的換行通常使用8個(gè)空格的規(guī)則,因?yàn)槌R?guī)縮進(jìn)(4個(gè)空格)會(huì)使語(yǔ)句體看起來(lái)比較費(fèi)勁。比如:/DONT USE THIS INDENTATIONif (condition1 & condition2) | (condition3 & condition4) |!(condition5 & condition6) /BAD WRAPS doSomethingAboutIt(); /MAKE THIS LINE EASY TO MISS/USE THIS INDENTATION INSTEADif (condition1

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

11、Expression) ? beta : gamma;alpha = (aLongBooleanExpression) ? beta : gamma; 5 注釋(Comments)Java程序有兩類注釋:實(shí)現(xiàn)注釋(implementation comments)和文檔注釋(document comments)。實(shí)現(xiàn)注釋是那些在C+中見(jiàn)過(guò)的,使用/*.*/和/界定的注釋。文檔注釋(被稱為doc comments)是Java獨(dú)有的,并由/*.*/界定。文檔注釋可以通過(guò)javadoc工具轉(zhuǎn)換成HTML文件。實(shí)現(xiàn)注釋用以注釋代碼或者實(shí)現(xiàn)細(xì)節(jié)。文檔注釋從實(shí)現(xiàn)自由(implementation-free)

12、的角度描述代碼的規(guī)范。它可以被那些手頭沒(méi)有源碼的開(kāi)發(fā)人員讀懂。注釋?xiě)?yīng)被用來(lái)給出代碼的總括,并提供代碼自身沒(méi)有提供的附加信息。注釋?xiě)?yīng)該僅包含與閱讀和理解程序有關(guān)的信息。例如,相應(yīng)的包如何被建立或位于哪個(gè)目錄下之類的信息不應(yīng)包括在注釋中。在注釋里,對(duì)設(shè)計(jì)決策中重要的或者不是顯而易見(jiàn)的地方進(jìn)行說(shuō)明是可以的,但應(yīng)避免提供代碼中己清晰表達(dá)出來(lái)的重復(fù)信息。多余的的注釋很容易過(guò)時(shí)。通常應(yīng)避免那些代碼更新就可能過(guò)時(shí)的注釋。注意:頻繁的注釋有時(shí)反映出代碼的低質(zhì)量。當(dāng)你覺(jué)得被迫要加注釋的時(shí)候,考慮一下重寫(xiě)代碼使其更清晰。注釋不應(yīng)寫(xiě)在用星號(hào)或其他字符畫(huà)出來(lái)的大框里。注釋不應(yīng)包括諸如制表符和回退符之類的特殊字符。5.

13、1 實(shí)現(xiàn)注釋的格式(Implementation Comment Formats)程序可以有4種實(shí)現(xiàn)注釋的風(fēng)格:塊(block)、單行(single-line)、尾端(trailing)和行末(end-of-line)。 塊注釋(Block Comments)塊注釋通常用于提供對(duì)文件,方法,數(shù)據(jù)結(jié)構(gòu)和算法的描述。塊注釋被置于每個(gè)文件的開(kāi)始處以及每個(gè)方法之前。它們也可以被用于其他地方,比如方法內(nèi)部。在功能和方法內(nèi)部的塊注釋?xiě)?yīng)該和它們所描述的代碼具有一樣的縮進(jìn)格式。塊注釋之首應(yīng)該有一個(gè)空行,用于把塊注釋和代碼分割開(kāi)來(lái),比如:/* * Here is a block comment.*/塊注釋可以以

14、/*-開(kāi)頭,這樣indent(1)就可以將之識(shí)別為一個(gè)代碼塊的開(kāi)始,而不會(huì)重排它。/*- * Here is a block comment with some very special * formatting that I want indent(1) to ignore. * * one * two * three*/ 注意:如果你不使用indent(1),就不必在代碼中使用/*-,或?yàn)樗丝赡軐?duì)你的代碼運(yùn)行indent(1)作讓步。 單行注釋(Single-Line Comments)短注釋可以顯示在一行內(nèi),并與其后的代碼具有一樣的縮進(jìn)層級(jí)。如果一個(gè)注釋不能在一行內(nèi)寫(xiě)完,就該采用塊注釋

15、。單行注釋之前應(yīng)該有一個(gè)空行。以下是一個(gè)Java代碼中單行注釋的例子:if (condition) /* Handle the condition. */ . 尾端注釋(Trailing Comments)極短的注釋可以與它們所要描述的代碼位于同一行,但是應(yīng)該有足夠的空白來(lái)分開(kāi)代碼和注釋。若有多個(gè)短注釋出現(xiàn)于大段代碼中,它們應(yīng)該具有相同的縮進(jìn)。以下是一個(gè)Java代碼中尾端注釋的例子:if (a = 2) return TRUE; /* special case */ else return isPrime(a); /* works only for odd a */ 行末注釋(End-Of-L

16、ine Comments)注釋界定符/,可以注釋掉整行或者一行中的一部分。它一般不用于連續(xù)多行的注釋文本;然而,它可以用來(lái)注釋掉連續(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;/5.2 文檔注釋(Documentation Comments)注意:此處描述的注釋格式之范例,參見(jiàn)Java源文件范例若想了解更多,參見(jiàn)How to Write Doc C

17、omments for Javadoc,其中包含了有關(guān)文檔注釋標(biāo)記的信息(return, param, see):若想了解更多有關(guān)文檔注釋和javadoc的詳細(xì)資料,參見(jiàn)javadoc的主頁(yè):文檔注釋描述Java的類、接口、構(gòu)造器,方法,以及字段(field)。每個(gè)文檔注釋都會(huì)被置于注釋定界符/*.*/之中,一個(gè)注釋對(duì)應(yīng)一個(gè)類、接口或成員。該注釋?xiě)?yīng)位于聲明之前:/* * The Example class provides .*/public class Example . 注意頂層(top-level)的類和接口是不縮進(jìn)的,而其成員是縮進(jìn)的。描述類和接口的文檔注釋的第一行(/*)不需縮進(jìn);隨

18、后的文檔注釋每行都縮進(jìn)1格(使星號(hào)縱向?qū)R)。成員,包括構(gòu)造函數(shù)在內(nèi),其文檔注釋的第一行縮進(jìn)4格,隨后每行都縮進(jìn)5格。若你想給出有關(guān)類、接口、變量或方法的信息,而這些信息又不適合寫(xiě)在文檔中,則可使用實(shí)現(xiàn)塊注釋(見(jiàn))或緊跟在聲明后面的單行注釋(見(jiàn)5.1.2)。例如,有關(guān)一個(gè)類實(shí)現(xiàn)的細(xì)節(jié),應(yīng)放入緊跟在類聲明后面的實(shí)現(xiàn)塊注釋中,而不是放在文檔注釋中。文檔注釋不能放在一個(gè)方法或構(gòu)造器的定義塊中,因?yàn)镴ava會(huì)將位于文檔注釋之后的第一個(gè)聲明與其相關(guān)聯(lián)。6 聲明(Declarations)6.1 每行聲明變量的數(shù)量(Number Per Line)推薦一行一個(gè)聲明,因?yàn)檫@樣以利于寫(xiě)注釋。亦即,int le

19、vel; / indentation levelint size; / size of table要優(yōu)于,int level, size; 不要將不同類型變量的聲明放在同一行,例如:int foo, fooarray; /WRONG! 注意:上面的例子中,在類型和標(biāo)識(shí)符之間放了一個(gè)空格,另一種被允許的替代方式是使用制表符:intlevel; / indentation levelintsize; / size of tableObjectcurrentEntry; / currently selected table entry 6.2 初始化(Initialization)盡量在聲明局部變量

20、的同時(shí)初始化。唯一不這么做的理由是變量的初始值依賴于某些先前發(fā)生的計(jì)算。6.3 布局(Placement)只在代碼塊的開(kāi)始處聲明變量。(一個(gè)塊是指任何被包含在大括號(hào)和中間的代碼。)不要在首次用到該變量時(shí)才聲明之。這會(huì)把注意力不集中的程序員搞糊涂,同時(shí)會(huì)妨礙代碼在該作用域內(nèi)的可移植性。void myMethod() int int1 = 0; / beginning of method block if (condition) int int2 = 0; / beginning of if block . 該規(guī)則的一個(gè)例外是for循環(huán)的索引變量for (int i = 0; i = 0) ? x

21、 : -x; 特殊注釋(Special Comments)在注釋中使用XXX來(lái)標(biāo)識(shí)某些未實(shí)現(xiàn)(bogus)的但可以工作(works)的內(nèi)容。用FIXME來(lái)標(biāo)識(shí)某些假的和錯(cuò)誤的內(nèi)容。11 代碼范例(Code Examples)11.1 Java源文件范例(Java Source File Example)下面的例子,展示了如何合理布局一個(gè)包含單一公共類的Java源程序。接口的布局與其相似。/* * (#)Blah.java 1.82 99/03/18 * * Copyright (c) 1994-1999 Sun Microsystems, Inc. * 901 San Antonio Road

22、, Palo Alto, California, 94303, U.S.A. * 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. */package java.blah;import java.blah.blahdy.BlahBlah;/* * Class description goes here. * * version 1.82 18 Mar 1999 * author Firstname Lastname */public class Blah extends SomeClass /* A class implementation comment can g

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論