(1)單行注釋:以“ // ”開頭后面接所要加的說明的內(nèi)容。如下面所示: //定義變量a int a = 10; //定義變量b int b = 20;上面的語句中,在編譯的過程就會直接略過注釋,只會編譯 int a = 10 和 int b = 20這兩句。由此可見注釋只是起著說明的作用。
目前創(chuàng)新互聯(lián)公司已為超過千家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、雁山網(wǎng)站維護(hù)等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。
(2)多行注釋:以“/*”開頭,以“*/”結(jié)尾。 假設(shè)當(dāng)你要說明你所寫的代碼的功能時。要說明的內(nèi)容有很多。如果全部放在同一行會顯得很難看。所以一般會用多行來寫,如下所示// 說明//說明//說明//說明以上是用四個單行注釋來注釋四行說明。但如果有10行說明就要按十個“//”這顯示很麻煩,所以這時就可采用多行注釋。上面的可改成:/*說明說明說明說明*/也可以這樣/* 說明 說明 說明 說明 */
(3)文檔注釋:以“/**”開頭,以“*/”結(jié)尾。文檔注釋主要是生成文檔的。
名稱 Java語言編碼規(guī)范(Java Code Conventions)
簡介 本文檔講述了Java語言的編碼規(guī)范,較之陳世忠先生《c++編碼規(guī)范》的浩繁詳盡,此文當(dāng)屬短小精悍了。而其中所列之各項條款,從編碼風(fēng)格,到注意事項,不單只Java,對于其他語言,也都很有借鑒意義。因為簡短,所以易記,大家不妨將此作為handbook,常備案頭,逐一對驗。
1 介紹
1.1 為什么要有編碼規(guī)范
1.2 版權(quán)聲明
2 文件名
2.1 文件后綴
2.2 常用文件名
3 文件組織
3.1 Java源文件
3.1.1 開頭注釋
3.1.2 包和引入語句
3.1.3 類和接口聲明
4 縮進(jìn)排版
4.1 行長度
4.2 換行
5 注釋
5.1 實現(xiàn)注釋的格式
5.1.1 塊注釋
5.1.2 單行注釋
5.1.3 尾端注釋
5.1.4 行末注釋
5.2 文擋注釋
6 聲明
6.1 每行聲明變量的數(shù)量
6.2 初始化
6.3 布局
6.4 類和接口的聲明
7 語句
7.1 簡單語句
7.2 復(fù)合語句
7.3 返回語句
7.4 if,if-else,if else-if else語句
7.5 for語句
7.6 while語句
7.7 do-while語句
7.8 switch語句
7.9 try-catch語句
8 空白
8.1 空行
8.2 空格
9 命名規(guī)范
10 編程慣例
10.1 提供對實例以及類變量的訪問控制
10.2 引用類變量和類方法
10.3 常量
10.4 變量賦值
10.5 其它慣例
10.5.1 圓括號
10.5.2 返回值
10.5.3 條件運算符"?"前的表達(dá)式"?"前的表達(dá)式
10.5.4 特殊注釋
11 代碼范例
11.1 Java源文件范例
1 介紹(Introduction)
1.1 為什么要有編碼規(guī)范(Why Have Code Conventions)
編碼規(guī)范對于程序員而言尤為重要,有以下幾個原因:
- 一個軟件的生命周期中,80%的花費在于維護(hù)
- 幾乎沒有任何一個軟件,在其整個生命周期中,均由最初的開發(fā)人員來維護(hù)
- 編碼規(guī)范可以改善軟件的可讀性,可以讓程序員盡快而徹底地理解新的代碼
- 如果你將源碼作為產(chǎn)品發(fā)布,就需要確任它是否被很好的打包并且清晰無誤,一如你已構(gòu)建的其它任何產(chǎn)品
為了執(zhí)行規(guī)范,每個軟件開發(fā)人員必須一致遵守編碼規(guī)范。每個人。
1.2 版權(quán)聲明(Acknowledgments)
本文檔反映的是Sun MicroSystems公司,Java語言規(guī)范中的編碼標(biāo)準(zhǔn)部分。主要貢獻(xiàn)者包括:Peter King,Patrick Naughton,Mike DeMoney,Jonni Kanerva,Kathy Walrath以及Scott Hommel。
本文檔現(xiàn)由Scott Hommel維護(hù),有關(guān)評論意見請發(fā)至shommel@eng.sun.com
2 文件名(File Names)
這部分列出了常用的文件名及其后綴。
2.1 文件后綴(File Suffixes)
Java程序使用下列文件后綴:
文件類別 文件后綴
Java源文件 .java
Java字節(jié)碼文件 .class
2.2 常用文件名(Common File Names)
常用的文件名包括:
文件名 用途
GNUmakefile makefiles的首選文件名。我們采用gnumake來創(chuàng)建(build)軟件。
README 概述特定目錄下所含內(nèi)容的文件的首選文件名
3 文件組織(File Organization)
一個文件由被空行分割而成的段落以及標(biāo)識每個段落的可選注釋共同組成。超過2000行的程序難以閱讀,應(yīng)該盡量避免。"Java源文件范例"提供了一個布局合理的Java程序范例。
3.1 Java源文件(Java Source Files)
每個Java源文件都包含一個單一的公共類或接口。若私有類和接口與一個公共類相關(guān)聯(lián),可以將它們和公共類放入同一個源文件。公共類必須是這個文件中的第一個類或接口。
Java源文件還遵循以下規(guī)則:
- 開頭注釋(參見"開頭注釋")
- 包和引入語句(參見"包和引入語句")
- 類和接口聲明(參見"類和接口聲明")
3.1.1 開頭注釋(Beginning Comments)
所有的源文件都應(yīng)該在開頭有一個C語言風(fēng)格的注釋,其中列出類名、版本信息、日期和版權(quán)聲明:
/*
* Classname
*
* Version information
*
* Date
*
* Copyright notice
*/
3.1.2 包和引入語句(Package and Import Statements)
在多數(shù)Java源文件中,第一個非注釋行是包語句。在它之后可以跟引入語句。例如:
package java.awt;
import java.awt.peer.CanvasPeer;
3.1.3 類和接口聲明(Class and Interface Declarations)
下表描述了類和接口聲明的各個部分以及它們出現(xiàn)的先后次序。參見"Java源文件范例"中一個包含注釋的例子。
類/接口聲明的各部分 注解
1 類/接口文檔注釋(/**……*/) 該注釋中所需包含的信息,參見"文檔注釋"
2 類或接口的聲明
3 類/接口實現(xiàn)的注釋(/*……*/)如果有必要的話 該注釋應(yīng)包含任何有關(guān)整個類或接口的信息,而這些信息又不適合作為類/接口文檔注釋。
4 類的(靜態(tài))變量 首先是類的公共變量,隨后是保護(hù)變量,再后是包一級別的變量(沒有訪問修飾符,access modifier),最后是私有變量。
5 實例變量 首先是公共級別的,隨后是保護(hù)級別的,再后是包一級別的(沒有訪問修飾符),最后是私有級別的。
6 構(gòu)造器
7 方法 這些方法應(yīng)該按功能,而非作用域或訪問權(quán)限,分組。例如,一個私有的類方法可以置于兩個公有的實例方法之間。其目的是為了更便于閱讀和理解代碼。
4 縮進(jìn)排版(Indentation)
4個空格常被作為縮進(jìn)排版的一個單位。縮進(jìn)的確切解釋并未詳細(xì)指定(空格 vs. 制表符)。一個制表符等于8個空格(而非4個)。
4.1 行長度(Line Length)
盡量避免一行的長度超過80個字符,因為很多終端和工具不能很好處理之。
注意:用于文檔中的例子應(yīng)該使用更短的行長,長度一般不超過70個字符。
4.2 換行(Wrapping Lines)
當(dāng)一個表達(dá)式無法容納在一行內(nèi)時,可以依據(jù)如下一般規(guī)則斷開之:
- 在一個逗號后面斷開
- 在一個操作符前面斷開
- 寧可選擇較高級別(higher-level)的斷開,而非較低級別(lower-level)的斷開
- 新的一行應(yīng)該與上一行同一級別表達(dá)式的開頭處對齊
- 如果以上規(guī)則導(dǎo)致你的代碼混亂或者使你的代碼都堆擠在右邊,那就代之以縮進(jìn)8個空格。
以下是斷開方法調(diào)用的一些例子:
someMethod(longExpression1, longExpression2, longExpression3,
longExpression4, longExpression5);
var = someMethod1(longExpression1,
someMethod2(longExpression2,
longExpression3));
以下是兩個斷開算術(shù)表達(dá)式的例子。前者更好,因為斷開處位于括號表達(dá)式的外邊,這是個較高級別的斷開。
longName1 = longName2 * (longName3 + longName4 - longName5)
+ 4 * longname6; //PREFFER
longName1 = longName2 * (longName3 + longName4
- longName5) + 4 * longname6; //AVOID
以下是兩個縮進(jìn)方法聲明的例子。前者是常規(guī)情形。后者若使用常規(guī)的縮進(jìn)方式將會使第二行和第三行移得很靠右,所以代之以縮進(jìn)8個空格
//CONVENTIONAL INDENTATION
someMethod(int anArg, Object anotherArg, 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ī)縮進(jìn)(4個空格)會使語句體看起來比較費勁。比如:
//DON’T USE THIS INDENTATION
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 condition6)) {
doSomethingAboutIt();
}
//OR USE THIS
if ((condition1 condition2) || (condition3 condition4)
||!(condition5 condition6)) {
doSomethingAboutIt();
}
這里有三種可行的方法用于處理三元運算表達(dá)式:
alpha = (aLongBooleanExpression) ? beta : gamma;
alpha = (aLongBooleanExpression) ? beta
: gamma;
alpha = (aLongBooleanExpression)
? beta
: gamma;
5 注釋(Comments)
Java程序有兩類注釋:實現(xiàn)注釋(implementation comments)和文檔注釋(document comments)。實現(xiàn)注釋是那些在C++中見過的,使用/*...*/和//界定的注釋。文檔注釋(被稱為"doc comments")是Java獨有的,并由/**...*/界定。文檔注釋可以通過javadoc工具轉(zhuǎn)換成HTML文件。
實現(xiàn)注釋用以注釋代碼或者實現(xiàn)細(xì)節(jié)。文檔注釋從實現(xiàn)自由(implementation-free)的角度描述代碼的規(guī)范。它可以被那些手頭沒有源碼的開發(fā)人員讀懂。
注釋應(yīng)被用來給出代碼的總括,并提供代碼自身沒有提供的附加信息。注釋應(yīng)該僅包含與閱讀和理解程序有關(guān)的信息。例如,相應(yīng)的包如何被建立或位于哪個目錄下之類的信息不應(yīng)包括在注釋中。
在注釋里,對設(shè)計決策中重要的或者不是顯而易見的地方進(jìn)行說明是可以的,但應(yīng)避免提供代碼中己清晰表達(dá)出來的重復(fù)信息。多余的的注釋很容易過時。通常應(yīng)避免那些代碼更新就可能過時的注釋。
注意:頻繁的注釋有時反映出代碼的低質(zhì)量。當(dāng)你覺得被迫要加注釋的時候,考慮一下重寫代碼使其更清晰。
注釋不應(yīng)寫在用星號或其他字符畫出來的大框里。注釋不應(yīng)包括諸如制表符和回退符之類的特殊字符。
5.1 實現(xiàn)注釋的格式(Implementation Comment Formats)
程序可以有4種實現(xiàn)注釋的風(fēng)格:塊(block)、單行(single-line)、尾端(trailing)和行末(end-of-line)。
5.1.1 塊注釋(Block Comments)
塊注釋通常用于提供對文件,方法,數(shù)據(jù)結(jié)構(gòu)和算法的描述。塊注釋被置于每個文件的開始處以及每個方法之前。它們也可以被用于其他地方,比如方法內(nèi)部。在功能和方法內(nèi)部的塊注釋應(yīng)該和它們所描述的代碼具有一樣的縮進(jìn)格式。
塊注釋之首應(yīng)該有一個空行,用于把塊注釋和代碼分割開來,比如:
/*
* Here is a block comment.
*/
塊注釋可以以/*-開頭,這樣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)作讓步。
參見"文檔注釋"
5.1.2 單行注釋(Single-Line Comments)
短注釋可以顯示在一行內(nèi),并與其后的代碼具有一樣的縮進(jìn)層級。如果一個注釋不能在一行內(nèi)寫完,就該采用塊注釋(參見"塊注釋")。單行注釋之前應(yīng)該有一個空行。以下是一個Java代碼中單行注釋的例子:
if (condition) {
/* Handle the condition. */
...
}
5.1.3 尾端注釋(Trailing Comments)
極短的注釋可以與它們所要描述的代碼位于同一行,但是應(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 */
}
5.1.4 行末注釋(End-Of-Line Comments)
注釋界定符"http://",可以注釋掉整行或者一行中的一部分。它一般不用于連續(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;
//}
5.2 文檔注釋(Documentation Comments)
注意:此處描述的注釋格式之范例,參見"Java源文件范例"
若想了解更多,參見"How to Write Doc Comments for Javadoc",其中包含了有關(guān)文檔注釋標(biāo)記的信息(@return, @param, @see):
若想了解更多有關(guān)文檔注釋和javadoc的詳細(xì)資料,參見javadoc的主頁:
文檔注釋描述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)。
6 聲明(Declarations)
6.1 每行聲明變量的數(shù)量(Number Per Line)
推薦一行一個聲明,因為這樣以利于寫注釋。亦即,
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
6.2 初始化(Initialization)
盡量在聲明局部變量的同時初始化。唯一不這么做的理由是變量的初始值依賴于某些先前發(fā)生的計算。
6.3 布局(Placement)
只在代碼塊的開始處聲明變量。(一個塊是指任何被包含在大括號"{"和"}"中間的代碼。)不要在首次用到該變量時才聲明之。這會把注意力不集中的程序員搞糊涂,同時會妨礙代碼在該作用域內(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!
...
}
...
}
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;
ivar2 = j;
}
int emptyMethod() {}
...
}
- 方法與方法之間以空行分隔
7 語句(Statements)
7.1 簡單語句(Simple Statements)
每行至多包含一條語句,例如:
argv++; // Correct
argc--; // Correct
argv++; argc--; // AVOID!
7.2 復(fù)合語句(Compound Statements)
復(fù)合語句是包含在大括號中的語句序列,形如"{ 語句 }"。例如下面各段。
- 被括其中的語句應(yīng)該較之復(fù)合語句縮進(jìn)一個層次
- 左大括號"{"應(yīng)位于復(fù)合語句起始行的行尾;右大括號"}"應(yīng)另起一行并與復(fù)合語句首行對齊。
- 大括號可以被用于所有語句,包括單個語句,只要這些語句是諸如if-else或for控制結(jié)構(gòu)的一部分。這樣便于添加語句而無需擔(dān)心由于忘了加括號而引入bug。
7.3 返回語句(return Statements)
一個帶返回值的return語句不使用小括號"()",除非它們以某種方式使返回值更為顯見。例如:
return;
return myDisk.size();
return (size ? size : defaultSize);
7.4 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 (condition) //AVOID! THIS OMITS THE BRACES {}!
statement;
7.5 for語句(for Statements)
一個for語句應(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)末尾(為更新子句)使用單獨的語句。
7.6 while語句(while Statements)
一個while語句應(yīng)該具有如下格式
while (condition) {
statements;
}
一個空的while語句應(yīng)該具有如下格式:
while (condition);
7.7 do-while語句(do-while Statements)
一個do-while語句應(yīng)該具有如下格式:
do {
statements;
} while (condition);
7.8 switch語句(switch Statements)
一個switch語句應(yīng)該具有如下格式:
switch (condition) {
case ABC:
statements;
/* falls through */
case DEF:
statements;
break;
case XYZ:
statements;
break;
default:
statements;
break;
}
每當(dāng)一個case順著往下執(zhí)行時(因為沒有break語句),通常應(yīng)在break語句的位置添加注釋。上面的示例代碼中就包含注釋/* falls through */。
7.9 try-catch語句(try-catch Statements)
一個try-catch語句應(yīng)該具有如下格式:
try {
statements;
} catch (ExceptionClass e) {
statements;
}
一個try-catch語句后面也可能跟著一個finally語句,不論try代碼塊是否順利執(zhí)行完,它都會被執(zhí)行。
try {
statements;
} catch (ExceptionClass e) {
statements;
} finally {
statements;
}
8 空白(White Space)
8.1 空行(Blank Lines)
空行將邏輯相關(guān)的代碼段分隔開,以提高可讀性。
下列情況應(yīng)該總是使用兩個空行:
- 一個源文件的兩個片段(section)之間
- 類聲明和接口聲明之間
下列情況應(yīng)該總是使用一個空行:
- 兩個方法之間
- 方法內(nèi)的局部變量和方法的第一條語句之間
- 塊注釋(參見"5.1.1")或單行注釋(參見"5.1.2")之前
- 一個方法內(nèi)的兩個邏輯段之間,用以提高可讀性
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ù)之間不因該加空格,比如:負(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)
- 強制轉(zhuǎn)型后應(yīng)該跟一個空格,例如:
myMethod((byte) aNum, (Object) x);
myMethod((int) (cp + 5), ((int) (i + 3)) + 1);
9 命名規(guī)范(Naming Conventions)
命名規(guī)范使程序更易讀,從而更易于理解。它們也可以提供一些有關(guān)標(biāo)識符功能的信息,以助于理解代碼,例如,不論它是一個常量,包,還是類。
標(biāo)識符類型 命名規(guī)則 例子
包(Packages) 一個唯一包名的前綴總是全部小寫的ASCII字母并且是一個頂級域名,通常是com,edu,gov,mil,net,org,或1981年ISO 3166標(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
類(Classes) 命名規(guī)則:類名是個一名詞,采用大小寫混合的方式,每個單詞的首字母大寫。盡量使你的類名簡潔而富于描述。使用完整單詞,避免縮寫詞(除非該縮寫詞被更廣泛使用,像URL,HTML) class Raster;
class ImageSprite;
接口(Interfaces) 命名規(guī)則:大小寫規(guī)則與類名相似 interface RasterDelegate;
interface Storing;
方法(Methods) 方法名是一個動詞,采用大小寫混合的方式,第一個單詞的首字母小寫,其后單詞的首字母大寫。 run();
runFast();
getBackground();
變量(Variables) 除了變量名外,所有實例,包括類,類常量,均采用大小寫混合的方式,第一個單詞的首字母小寫,其后單詞的首字母大寫。變量名不應(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;
常量(Constants) 類常量和ANSI常量的聲明,應(yīng)該全部大寫,單詞間用下劃線隔開。(盡量避免ANSI常量,容易引起錯誤) static final int MIN_WIDTH = 4;
static final int MAX_WIDTH = 999;
static final int GET_THE_CPU = 1;
10 編程慣例(Programming Practices)
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)的話),那么把類的實例變量聲明為公有是合適的。
試想一下,一個沒有一句注釋的程序源碼,怎么讀,一個程序要上萬條代碼不可能全部記得住哪一塊是什么用,而且一個項目也不會是一個人獨自完成,那樣效率太低,多人合作就要給別人說明,每一塊是什么用,方便他人使用,方便自己更正,而這些說明文字就是注釋,注釋不會被執(zhí)行,不影響運行結(jié)果。
Java中代碼的注釋有三種:
// 注釋一行?
/* ...... */ 注釋若干行?
/** ...... */ 注釋若干行,并寫入 javadoc 文檔
前兩種比較容易理解,至于第三種,你學(xué)習(xí)Java看的api文檔就是javadoc程序根據(jù)第三種的注釋生成的。
擴(kuò)展資料
注釋就是對代碼的解釋和說明,其目的是讓人們能夠更加輕松地了解代碼。注釋是編寫程序時,寫程序的人給一個語句、程序段、函數(shù)等的解釋或提示,能提高程序代碼的可讀性。
我看動力節(jié)點的java基礎(chǔ)大全301集教中的三種注釋方法:
1、單行注釋?? //注釋的內(nèi)容
2、多行注釋??/*......*/
3、/**......*/,這種方式和第二種方式相似。這種格式是為了便于javadoc程序自動生成文檔。
下面介紹一下Javadoc的標(biāo)記:
特別聲明:
(1)javadoc針對public類生成注釋文檔
(2)javadoc只能在public、protected修飾的方法或者屬性之上
(3)javadoc注釋的格式化:前導(dǎo)*號和HTML標(biāo)簽
(4)javadoc注釋要僅靠在類、屬性、方法之前
下面主要舉例說明第三種注釋的應(yīng)用:
(1)首先編寫.java文件
(2)在命令行中執(zhí)行以下dos命令:
javadoc *.java //根據(jù)相應(yīng)的Java源代碼及其說明語句生成HTML文檔
//javadoc標(biāo)記:是@開頭的,對javadoc而言,特殊的標(biāo)記。
(3)在當(dāng)前目錄下就會產(chǎn)生doc文件夾,里面有一系列的.html文件
附上代碼:
[java]?view plain?copy
span?style="font-size:18px;"*/
/**javadoc注釋的內(nèi)容
*/
public?class?Hello{
/**屬性上的注釋*/
public?String?name;
/**這是main方法,是程序的入口
*@param?args?用戶輸入?yún)?shù)
*/
public?static?void?main(String[]?args){
System.out.println("Hello?World!");
f1();
}
/**?這是第1個方法,其作用是...*/
public?static?void?f1(){
System.out.println("f1()!");
}
}/span
[java]?view plain?copy
span?style="font-size:18px;"import?java.io.IOException;
/**javadoc注釋內(nèi)容
*@since?1.0
*@version?1.1
*@author?Blue?Jey
*br鏈接到另一個文檔{@link?Hello},就這些
*see?Hello
*/
public?class?HelloWorld{
/**非public,protected?屬性上的注釋不生成*/
public?String?name;
/**這是main方法,是程序的入口
*@param?args?用戶輸入的參數(shù),是數(shù)組
*@throws?IOException?main方法io異常
*/
public?static?void?main(String?args[])?throws?IOException{
System.out.println("hello?World!");
f1();
f2(1);
}
/**這是第一個方法,其作用是....
*@deprecated?從版本1.2開始,不再建議使用此方法
*/
public?static?void?f1(){
System.out.println("fl()!");
}
/**這是第二個方法,其作用是....
*@return?返回是否OK
*@param?i?輸入?yún)?shù)i
*@see?Hello
*@throws?IOException?io異常
*/
public?static?String?f2(int?i)throws?IOException{
System.out.println("f1()!");
return?"OK";
}
}?/span
注意:
如果源文件中有用到@version,@author標(biāo)記,則在執(zhí)行javadoc命令時,要加-version?-author
javadoc?-version?-author?-d?doc?*.java
(其中用-version用于提取源文件中的版本信息?-author用于提取源文件中的作者信息)
注釋是為了方便自己或代碼維護(hù)方更容易地讀懂代碼的用處。
一、背景?
1、當(dāng)我們第一次接觸某段代碼,但又被要求在極短的時間內(nèi)有效地分析這段代碼,我們需要什么樣的注釋信息??
2、怎么樣避免我們的注釋冗長而且凌亂不堪呢??
3、在多人協(xié)同開發(fā)、維護(hù)的今天,我們需要怎么樣的注釋來保證高質(zhì)、高交的進(jìn)行開發(fā)和維護(hù)工作呢??
二、意義?
程序中的注釋是程序設(shè)計者與程序閱讀者之間通信的重要手段。應(yīng)用注釋規(guī)范對于軟件本身和軟件開發(fā)人員而言尤為重要。并且在流行的敏捷開發(fā)思想中已經(jīng)提出了將注釋轉(zhuǎn)為代碼的概念。好的注釋規(guī)范可以盡可能的減少一個軟件的維護(hù)成本?,?并且?guī)缀鯖]有任何一個軟件,在其整個生命周期中,均由最初的開發(fā)人員來維護(hù)。好的注釋規(guī)范可以改善軟件的可讀性,可以讓開發(fā)人員盡快而徹底地理解新的代碼。好的注釋規(guī)范可以最大限度的提高團(tuán)隊開發(fā)的合作效率。長期的規(guī)范性編碼還可以讓開發(fā)人員養(yǎng)成良好的編碼習(xí)慣,甚至鍛煉出更加嚴(yán)謹(jǐn)?shù)乃季S能力。?
三、注釋的原則?
1、 注釋形式統(tǒng)一?
在整個應(yīng)用程序中,使用具有一致的標(biāo)點和結(jié)構(gòu)的樣式來構(gòu)造注釋。如果在其他項目組發(fā)現(xiàn)他們的注釋規(guī)范與這份文檔不同,按照他們的規(guī)范寫代碼,不要試圖在既成的規(guī)范系統(tǒng)中引入新的規(guī)范。?
2、 注釋的簡潔?
內(nèi)容要簡單、明了、含義準(zhǔn)確,防止注釋的多義性,錯誤的注釋不但無益反而有害。?
3、 注釋的一致性?
在寫代碼之前或者邊寫代碼邊寫注釋,因為以后很可能沒有時間來這樣做。另外,如果有機(jī)會復(fù)查已編寫的代碼,在今天看來很明顯的東西六周以后或許就不明顯了。通常描述性注釋先于代碼創(chuàng)建,解釋性注釋在開發(fā)過程中創(chuàng)建,提示性注釋在代碼完成之后創(chuàng)建。修改代碼的同時修改相應(yīng)的注釋,以保證代碼與注釋的同步。?
4、 注釋的位置?
保證注釋與其描述的代碼相鄰,即注釋的就近原則。對代碼的注釋應(yīng)放在其上方相鄰或右方的位置,不可放在下方。避免在代碼行的末尾添加注釋;行尾注釋使代碼更難閱讀。不過在批注變量聲明時,行尾注釋是合適的;在這種情況下,將所有行尾注釋要對齊。?
5、 注釋的數(shù)量?
注釋必不可少,但也不應(yīng)過多,在實際的代碼規(guī)范中,要求注釋占程序代碼的比例達(dá)到20%左右。注釋是對代碼的“提示”,而不是文檔,程序中的注釋不可喧賓奪主,注釋太多了會讓人眼花繚亂,注釋的花樣要少。不要被動的為寫注釋而寫注釋。?
6、刪除無用注釋?
在代碼交付或部署發(fā)布之前,必須刪掉臨時的或無關(guān)的注釋,以避免在日后的維護(hù)工作中產(chǎn)生混亂。?
7、 復(fù)雜的注釋?
如果需要用注釋來解釋復(fù)雜的代碼,請檢查此代碼以確定是否應(yīng)該重寫它。盡一切可能不注釋難以理解的代碼,而應(yīng)該重寫它。盡管一般不應(yīng)該為了使代碼更簡單便于使用而犧牲性能,但必須保持性能和可維護(hù)性之間的平衡。?
8、 多余的注釋?
描述程序功能和程序各組成部分相互關(guān)系的高級注釋是最有用的,而逐行解釋程序如何工作的低級注釋則不利于讀、寫和修改,是不必要的,也是難以維護(hù)的。避免每行代碼都使用注釋。如果代碼本來就是清楚、一目了然的則不加注釋,避免多余的或不適當(dāng)?shù)淖⑨尦霈F(xiàn)。?
9、必加的注釋?
典型算法必須有注釋。在代碼不明晰或不可移植處必須有注釋。在代碼修改處加上修改標(biāo)識的注釋。在循環(huán)和邏輯分支組成的代碼中添加注釋。為了防止問題反復(fù)出現(xiàn),對錯誤修復(fù)和解決方法的代碼使用注釋,尤其是在團(tuán)隊環(huán)境中。?
10、注釋在編譯代碼時會被忽略,不編譯到最后的可執(zhí)行文件中,所以注釋不?
會增加可執(zhí)行文件的大小。?
四、JAVA注釋技巧?
1、空行和空白字符也是一種特殊注釋。利用縮進(jìn)和空行,使代碼與注釋容易區(qū)?
別,并協(xié)調(diào)美觀。?
2、當(dāng)代碼比較長,特別是有多重嵌套時,為了使層次清晰,應(yīng)當(dāng)在一些段落的?
結(jié)束處加注釋(在閉合的右花括號后注釋該閉合所對應(yīng)的起點),注釋不能?
寫得很長,只要能表示是哪個控制語句控制范圍的結(jié)束即可,這樣便于閱讀。?
3、將注釋與注釋分隔符用一個空格分開,在沒有顏色提示的情況下查看注釋時,?
這樣做會使注釋很明顯且容易被找到。?
4、不允許給塊注釋的周圍加上外框。這樣看起來可能很漂亮,但是難于維護(hù)。?
5、每行注釋(連同代碼)不要超過120個字(1024×768),最好不要超過80?
字(800×600)?。?
6、Java編輯器(IDE)注釋快捷方式。Ctrl+/?注釋當(dāng)前行,再按則取消注釋。?
7、對于多行代碼的注釋,盡量不采用“/*......*/”,而采用多行“//”注釋,?
這樣雖然麻煩,但是在做屏蔽調(diào)試時不用查找配對的“/*......*/”。?
8、注釋作為代碼切換開關(guān),用于臨時測試屏蔽某些代碼。
1、單行(single-line)--短注釋://…… 單獨行注釋:在代碼中單起一行注釋, 注釋前最好有一行空行,并與其后的代碼具有一樣的縮進(jìn)層級。如果單行無法完成,則應(yīng)采用塊注釋。 注釋格式:/* 注釋內(nèi)容 */ 行頭注釋:在代碼行的開頭進(jìn)行注釋。主要為了使該行代碼失去意義。 注釋格式:// 注釋內(nèi)容 行尾注釋:尾端(trailing)--極短的注釋,在代碼行的行尾進(jìn)行注釋。一般與代碼行后空8(至少4)個格,所有注釋必須對齊。 注釋格式:代碼 + 8(至少4)個空格 + // 注釋內(nèi)容 2、塊(block)--塊注釋:/*……*/ 注釋若干行,通常用于提供文件、方法、數(shù)據(jù)結(jié)構(gòu)等的意義與用途的說明,或者算法的描述。一般位于一個文件或者一個方法的前面,起到引導(dǎo)的作用,也可以根據(jù)需要放在合適的位置。這種域注釋不會出現(xiàn)在HTML報告中。注釋格式通常寫成: /* * 注釋內(nèi)容 */ 3、文檔注釋:/**……*/ 注釋若干行,并寫入javadoc文檔。每個文檔注釋都會被置于注釋定界符 /**......*/ ...