6.3 布局(Placement)
只在代碼塊的開始處聲明變量。(一個塊是指任何被包含在大括號"{"和"}"中間的代碼。)不要在首次用到該變量時才聲明之。這會把注意力不集中的程序員搞糊涂,同時會妨礙代碼在該作用域內(nèi)的可移植性。















該規(guī)則的一個例外是for循環(huán)的索引變量




避免聲明的局部變量覆蓋上一級聲明的變量。例如,不要在內(nèi)部代碼塊中聲明相同的變量名:

















6.4 類和接口的聲明(Class and Interface Declarations)
當(dāng)編寫類和接口是,應(yīng)該遵守以下格式規(guī)則:
- 在方法名與其參數(shù)列表之前的左括號"("間不要有空格
- 左大括號"{"位于聲明語句同行的末尾
- 右大括號"}"另起一行,與相應(yīng)的聲明語句對齊,除非是一個空語句,"}"應(yīng)緊跟在"{"之后





















- 方法與方法之間以空行分隔
7 語句(Statements)
7.1 簡單語句(Simple Statements)
每行至多包含一條語句,例如:




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語句不使用小括號"()",除非它們以某種方式使返回值更為顯見。例如:






7.4 if,if-else,if else-if else語句(if, if-else, if else-if else Statements)
if-else語句應(yīng)該具有如下格式:































注意:if語句總是用"{"和"}"括起來,避免使用如下容易引起錯誤的格式:


7.5 for語句(for Statements)
一個for語句應(yīng)該具有如下格式:






一個空的for語句(所有工作都在初始化,條件判斷,更新子句中完成)應(yīng)該具有如下格式:

當(dāng)在for語句的初始化或更新子句中使用逗號時,避免因使用三個以上變量,而導(dǎo)致復(fù)雜度提高。若需要,可以在for循環(huán)之前(為初始化子句)或for循環(huán)末尾(為更新子句)使用單獨的語句。
7.6 while語句(while Statements)
一個while語句應(yīng)該具有如下格式






一個空的while語句應(yīng)該具有如下格式:

7.7 do-while語句(do-while Statements)
一個do-while語句應(yīng)該具有如下格式:






7.8 switch語句(switch Statements)
一個switch語句應(yīng)該具有如下格式:





















每當(dāng)一個case順著往下執(zhí)行時(因為沒有break語句),通常應(yīng)在break語句的位置添加注釋。上面的示例代碼中就包含注釋/* falls through */。
7.9 try-catch語句(try-catch Statements)
一個try-catch語句應(yīng)該具有如下格式:









一個try-catch語句后面也可能跟著一個finally語句,不論try代碼塊是否順利執(zhí)行完,它都會被執(zhí)行。














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)該被空格分開,例如:







注意:空格不應(yīng)該置于方法名與其左括號之間。這將有助于區(qū)分關(guān)鍵字和方法調(diào)用。
- 空白應(yīng)該位于參數(shù)列表中逗號的后面
- 所有的二元運算符,除了".",應(yīng)該使用空格將之與操作數(shù)分開。一元操作符和操作數(shù)之間不因該加空格,比如:負(fù)號("-")、自增("++")和自減("--")。例如:










- for語句中的表達(dá)式應(yīng)該被空格分開,例如:

- 強制轉(zhuǎn)型后應(yīng)該跟一個空格,例如:


9 命名規(guī)范(Naming Conventions)
命名規(guī)范使程序更易讀,從而更易于理解。它們也可以提供一些有關(guān)標(biāo)識符功能的信息,以助于理解代碼,例如,不論它是一個常量,包,還是類。
包(Packages) 一個唯一包名的前綴總是全部小寫的ASCII字母并且是一個頂級域名,通常是com,edu,gov,mil,net,org,或1981年ISO 3166標(biāo)準(zhǔn)所指定的標(biāo)識國家的英文雙字符代碼。包名的后續(xù)部分根據(jù)不同機構(gòu)各自內(nèi)部的命名規(guī)范而不盡相同。這類命名規(guī)范可能以特定目錄名的組成來區(qū)分部門(department),項目(project),機器(machine),或注冊名(login names)。

類(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)的話),那么把類的實例變量聲明為公有是合適的。
10.2 引用類變量和類方法(Referring to Class Variables and Methods)
避免用一個對象訪問一個類的靜態(tài)變量和方法。應(yīng)該用類名替代。例如:



10.3 常量(Constants)
位于for循環(huán)中作為計數(shù)器值的數(shù)字常量,除了-1,0和1之外,不應(yīng)被直接寫入代碼。
10.4 變量賦值(Variable Assignments)
避免在一個語句中給多個變量賦相同的值。它很難讀懂。例如:

不要將賦值運算符用在容易與相等關(guān)系運算符混淆的地方。例如:






應(yīng)該寫成






不要使用內(nèi)嵌(embedded)賦值運算符試圖提高運行時的效率,這是編譯器的工作。例如:






10.5 其它慣例(Miscellaneous Practices)
10.5.1 圓括號(Parentheses)
一般而言,在含有多種運算符的表達(dá)式中使用圓括號來避免運算符優(yōu)先級問題,是個好方法。即使運算符的優(yōu)先級對你而言可能很清楚,但對其他人未必如此。你不能假設(shè)別的程序員和你一樣清楚運算符的優(yōu)先級。


10.5.2 返回值(Returning Values)
設(shè)法讓你的程序結(jié)構(gòu)符合目的。例如:

























10.5.3 條件運算符"?"前的表達(dá)式(Expressions before ´?´ in the Conditional Operator)
如果一個包含二元運算符的表達(dá)式出現(xiàn)在三元運算符" ? : "的"?"之前,那么應(yīng)該給表達(dá)式添上一對圓括號。例如:

10.5.4 特殊注釋(Special Comments)
在注釋中使用XXX來標(biāo)識某些未實現(xiàn)(bogus)的但可以工作(works)的內(nèi)容。用FIXME來標(biāo)識某些假的和錯誤的內(nèi)容。
11 代碼范例(Code Examples)
11.1 Java源文件范例(Java Source File Example)
下面的例子,展示了如何合理布局一個包含單一公共類的Java源程序。接口的布局與其相似。更多信息參見"類和接口聲明"以及"文擋注釋"。



































































































