JAVA代碼編寫規範

一、 Java命名的一般性指導
1. 類名首字母應該大寫。屬性(成員變量)、方法、對象變量以及所有標識符(如形式參
數、實際參數、局部變量)的首字母應小寫,其中包含的所有單詞都應緊靠在一起,而
且大寫中間單詞的首字母。
例如:類名:ThisIsAClassName 屬性或方法名:thisIsMethodOrFieldName
對象變量:thisIsAClassVariable
2. Java 包(Package)屬於一種特殊情況,它們全都是小寫字母,即便中間的單詞亦是如
此。對於全局包,將你的 Internet 域名反轉並接上包名,
例如:cn.edu.usst.dingyuewei.package
另外,package 行要在import 行之前,import 中標準的包名要在本地的包名之
前,而且按照字母順序排列。如果 import 行中包含了同一個包中的不同子目錄,則應
該用 * 來處理。例如
package hotlava.net.stats;
import java.io.*;
import java.util.Observable;
import hotlava.util.Application;
這裏 java.io.* 是用來代替InputStream and OutputStream 的。
3. 接口(Interface):採用完整的英文描述符說明接口封裝,所有單詞的第一個字母大
寫。習慣上,名字後面加上後綴 able, ible 或者 er。
例如:Contactable,Prompter。
4. 組件(Component)使用完整的英文描述來說明組件的用途,末端應接上組件類型。
例如:okButton,customerList,fileMenu。
5. 類中常用方法的命名:
l 類的獲取方法(一般具有返回值)一般要求被方法名使用被訪問字段名,前面加上
前綴get,如getFirstName(), getLastName()。
l 類的布爾型的判斷方法一般要求方法名使用單詞 is 做前綴,如isPersistent(),
isString()。或者使用具有邏輯意義的單詞,例如equal 或equals
l 類的設置方法(一般返回類型爲void):被訪問字段名的前面加上前綴 set,如
setFirstName(),setLastName(),setWarpSpeed()。
l 類的普通方法一般採用完整的英文描述說明成員方法功能,第一個單詞儘可能採用
一個生動的動詞,第一個字母小寫,如 openFile(), addAccount()。
l 構造方法應該用遞增的方式寫(比如:參數多的寫在後面)。
例如:
public CounterSet(){}
public CounterSet(int size){ this.size = size;}
l  toString 方法:一般情況下,每一個類都應該定義toString 方法,其格式爲:
public String toString() {…}
l 一般應考慮置入一個main()方法,其中包含用於測試那個類的代碼,如果包含了
main() 方法, 那麼它應該寫在類的底部。
6. 靜態常量字段(static final)一般全部採用大寫字母,單詞之間用下劃線分隔(也有
特例,如Java 類庫中關於顏色的常數沒有嚴格地全部使用大寫字母)。如MIN_BALANCE,
PDF 文件使用 "pdfFactory Pro" 
DEFAULT_DATE。
7. 循環計數變量通常採用字母 i,j,k 或者 counter。而數組應該總是用下面的方式來
命名:objectType[]或 byte[] buffer。
二、 Java註釋約定
1. 類的整體註釋:遵循JavaDoc的規範,在每一個源文件的開頭註明該CLASS的作用, 作
簡要說明, 並寫上源文件的作者, 編寫日期。如果是修改別人編寫的源文件,要在修改
信息上註明修改者和修改日期。
例如:
/**
* @(#):CLASSNAME.java
* @description: Description of this java
* @author: PROGRAMMER'S NAME YYYY/MM/DD
* @version: Version No.
* @modify:
* @Copyright: 版權由擁有
*/
2. 類中方法的註釋:遵循JavaDoc的規範,在每個方法的前部用塊註釋的方法描述此方法
的作用,以及傳入,傳出參數的類型和作用,以及需要捕獲的錯誤。
例如:
/**
* 方法的描述
*
*
*@param 參數的描述
*@return 返回類型的描述
*@exception 出錯信息的描述
*/
3. 行註釋:使用//…的註釋方法來註釋需要表明的內容。並且把註釋的內容放在需要注
釋的代碼的前面一行或同一行。
4. 塊註釋:使用/**和*/註釋的方法來註釋需要表明的內容。並且把註釋的內容放在需要
註釋的代碼的前面。
5. 註釋哪些部分:類的目的(即類所完成的功能)、設置接口的目的以及應如何被使用、
成員方法註釋(對於設置與獲取成員方法,在成員變量已有說明的情況下,可以不加註
釋;普通成員方法要求說明完成什麼功能,參數含義是什麼?返回什麼?)、普通成員
方法內部註釋(控制結構、代碼做了些什麼以及爲什麼這樣做,處理順序等)、實參和
形參的含義以及其他任何約束或前提條件、字段或屬性描述。而對於局部變量,如無特
別意義的情況下不加註釋。
三、 Javabean開發規範
1. 數據庫連接規範
l 在開發過程中,數據庫連接通過調用已寫好的一個數據庫連接類JDBC 來實現。
l 數據庫的連接一般放在數據庫的構造方法中建立。
l 在每個方法中,若對數據庫操作結束,則必須顯式地調用JDBC類裏的方法close(),
PDF 文件使用 "pdfFactory Pro" 
將數據庫連接關閉。
2. 代碼書寫規範(一般Java 程序代碼可參考)
有一個良好的代碼書寫習慣。代碼編寫規範的基本約定如下:
l 每一行的代碼不宜過長,一般以頁面寬度的80%至90%爲宜。對於連接在一起,代
碼較長的程序,可考慮採用分行顯示的方式,第二行一般在第一行的基礎上縮進兩
個空格(或一個TAB,這一點在書寫複雜的sql 語句時,尤其要注意!)。
例如:
public Vector getAgentInfo(String agent_name, String agent_type)
throws Exception,SQLException
l  javabean 中各個方法之間,一般以兩行間隔,而不允許連在一起。
例如:
public void getAgent()
{}
//第一行;
//第二行;
public int getNum()
{}
l 大括號{}使用的規定:{}在使用時,如果不是在一行代碼中,則應該做到:左括號
“{”與右括號“}”上下對齊,這一點在有多個嵌套的情況下顯得尤爲重要。大括
號裏的首行代碼,必須在下一行,並且縮進兩個空格(或一個TAB)。
例如:
public void processRequest(HttpServletRequest clientRequest){
String itemName, itemNum;
int newItemNum;
if(submit==null){
clear();
}else{
update();
try{
newItemNum = (Integer.valueOf(itemNum)).intValue();
}catch(Num berFormatException e){
itemNumber = 1;
}
}
}
l 定義變量時,同一類型的變量可以一起定義,但數量一般限定在兩到三個,三個以
上則必須分開定義。變量定義與流程語句之間必須向間隔一行。
3. 例外控制規範
在編寫javabean 時,例外(exception)的控制一般有兩種方式:
l 一種是在方法裏捕獲
l 另一種是通過try{}catch(Exception e){}的方式來捕獲。
兩種方法無論採用哪種均可以,但他們在使用場合還是有一些區別的。
第一種捕獲方法,主要適用於對具體是哪種例外、並且在哪裏會發生不太清楚的情況。
第二種捕獲方法,適用於比較瞭解例外的發生情況。
PDF 文件使用 "pdfFactory Pro" 
4. 方法返回類型規範
這裏所指的方法返回類型,專指返回記錄集的情況。一般在javabean 裏返回的記錄集
都是以ResultSet 的類型返回的,考慮到ResultSet 在用完以後需要關閉,如果向頁面返回
ResultSet 類型,則須在頁面裏關閉rs,這樣會帶來安全方面的隱患。爲了解決這個問題,
我們提供了一個方法,將ResultSet類型轉換爲一個Vector 類型。程序員在javabean裏只需
調用相應的方法,即可實現轉換。
四、 Java編碼其它約定
1. JSP文件命名採用完整的英文描述說明JSP所完成的功能,儘可能包括一個生動的動詞,
第一個字母小寫,如:viewMessage.jsp、editUser.jsp 或者forumChooser.jsp 等。
2. Servlet 類命名一般對應於所服務的對象加後綴Service 來命名,如:UserService,
TradeService 等。
3. 使用StringBuffer 對象:在處理String 的時候要儘量使用StringBuffer 類,
StringBuffer 類是構成String 類的基礎。String 類將StringBuffer 類封裝了起
來,(以花費更多時間爲代價)爲開發人員提供了一個安全的接口。當我們在構造字符
串的時候,我們應該用StringBuffer 來實現大部分的工作,當工作完成後將
StringBuffer 對象再轉換爲需要的 String 對象。比如:如果有一個字符串必須不斷
地在其後添加許多字符來完成構造,那麼我們應該使用StringBuffer 對象和它的
append() 方法。如果我們用String 對象代替 StringBuffer 對象的話,會花費許多
不必要的創建和釋放對象的 CPU 時間。
4. 避免太多的使用 synchronized 關鍵字:避免不必要的使用關鍵字 synchronized,應
該在必要的時候再使用它,這是一個避免死鎖的好方法。必須使用時,也儘量控制範
圍,最好在塊級控制。
5. 避免使用java.util.Vector 類:因爲Vector 是is synchronized.",所以使用
java.util.Vector 類在性能上會有所減低。
6. 儘量使用接口而不是一個具體的類:
例如:給定一個SQL 語句,返回一個對象的列表,實現中用java.util.ArrayList 實現,
於是定義方法爲:
public java.util.ArrayList getObjectItems(String sql);
上面的方法存在一個問題,當getObjectItems內改用Vector 或LinkedList實現,外
部類必須做相應更改。一個更好的方法是定義返回值爲java.util.AbstractList更合適:
public java.util.AbstractList getObjectItems(String sql);
這樣即使更改實現,外部類也不必做相應更改。
7. 避免使用索引來調用數據庫中間層組件返回的結果集:
例如:
for(int i=1;i<=dt.getRowCount();i++){
String field1 = dt.getField(i,0).toString();

}
而應用字段名來存取結果集:
for(int i=1;i<=dt.getRowCount();i++){
String field1 = dt.getField(i,"field1").toString();

}
PDF 文件使用 "pdfFactory Pro"

這樣在數據庫設計更改或查詢的SQL 語句發生變化時,不會影響到程序的執行。

儘量不要使用*通配符,例如Select * from tableName,應該具體寫明字段名。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章