IBM GDC DL
Teambiz后臺(tái)開(kāi)發(fā)規(guī)范
(2012年3月9日修訂版)
撰寫:何楊
2012年3月9日
1. 包的命名
包名應(yīng)全由小寫單詞組成,如com.dalpha.common.gui,com.dalpha.biz.supply
2. 接口的命名
Java接口采用統(tǒng)一的前綴I,如IService.java
3. 接口實(shí)現(xiàn)類的定義
接口實(shí)現(xiàn)類建議采用統(tǒng)一的后綴Impl,如:ServiceImpl
4. 抽象類,普通類的定義
可視化類:功能描述后加上相應(yīng)的后綴。
例如:
對(duì)于對(duì)話框,功能加Dlg,如:ContractDlg
對(duì)于面板,功能加Panel,如:ContractPanel
對(duì)于按鈕,功能加Btn,如:deleteBtn
對(duì)于實(shí)用工具類,功能加Util后綴,如:FileUtil
對(duì)于線程類,功能加Thread后綴,如:TimerThread
對(duì)于消息主題,功能加Listener后綴或者sender后綴,如:NegotitiaonListener
5. 常量定義
關(guān)于常量的命名方法,在JAVA代碼中,無(wú)論什么時(shí)候,均提倡應(yīng)用常量取代數(shù)字、固定字符串。也就是說(shuō),程序中除0,1以外,盡量不應(yīng)該出現(xiàn)其他數(shù)字。常量可以集中在程序開(kāi)始部分定義或者更寬的作用域內(nèi),名字應(yīng)該都使用大寫字母,并且指出該常量完整含義。如果一個(gè)常量名稱由多個(gè)單詞組成,則應(yīng)該用下劃線“_”來(lái)分割這些單詞。
舉例:定義最大時(shí)間常量,如下:
Public static final String Max_Time;
或者Public static final String MAX_TIME。
6. 變量定義
命名規(guī)則如下:
一個(gè)變量名應(yīng)該是可讀的,易記的和恰如其分的。
所有變量在其作用域內(nèi)必須有一個(gè)唯一的名稱,不要試圖用大小寫來(lái)區(qū)分不同的變量。
變量的名稱一般應(yīng)該是名詞形式,要能體現(xiàn)出變量的作用,不要使用毫無(wú)意義的名稱給方法或者變量命名。
使用駱駝命名法給變量命名。變量名以小寫字母開(kāi)頭,以后每遇到一個(gè)單詞則將其首字母大寫。變量名中最重要的詞應(yīng)該放在最前面。如revenueTotal(總收入), expenseAverage(平均支出)
在體現(xiàn)變量的功能前提下縮短變量的長(zhǎng)度,變量名為6-8個(gè)字符最佳,最好不要超過(guò)18個(gè)字符。
縮寫要少用,除非它有唯一的意義并達(dá)成了廣泛共識(shí)。避免使用程序語(yǔ)言中的保留字和關(guān)鍵字。
在循環(huán)和多重循環(huán)中才能使用單字符的變量名,如i,j,k,切勿在其它場(chǎng)合中使用它們。
當(dāng)變量是一個(gè)集合如數(shù)組,鏈表或哈希表時(shí)建議采用s后綴以明示出來(lái),當(dāng)其不是時(shí)切勿采用。也可以采用數(shù)組后綴s,鏈表后綴list,哈希表后綴map的做法,如users,userList,userMap。
常用的變量命名
數(shù)量:count
序列:index
總和:sum/total
序號(hào):id
名稱:name
大小:size
返回值:retval
圖表:chart/graph/diagram
實(shí)體:entity
標(biāo)志:symbol
平均值:average
狀態(tài):status
幾何尺寸:width,height
布爾變量的命名
一般來(lái)說(shuō)在Java編程中不推薦使用匈牙利命名法,即為每一個(gè)類型的變量名前加上其類型的前綴的做法,但布爾變量例外。
布爾變量一般以單詞is,has,can,not開(kāi)頭,如isMale,isLoggedIn, hasChild, canBeSerialized,notFound.
常用的布爾變量后綴:done,error,passed,valid,found,success,ok
變量名中的常見(jiàn)對(duì)仗詞
Begin/end
First/last
Locked/unlocked
Min/max
Next/previous(prev)
Old/new
Opened/closed
Visible/invisible
Source/target
Source/destination
Up/down
可視化組件變量的定義為功能加可視化后綴,比如deleteBtn
7. 參數(shù)定義
同普通變量定義一致。
8. 方法定義
函數(shù)(方法)名的首個(gè)單詞應(yīng)該是動(dòng)詞,因?yàn)樗硎疽粋€(gè)動(dòng)作,會(huì)執(zhí)行一個(gè)或多個(gè)操作。
使用具有描述性的名稱,命名要能準(zhǔn)確的表示出函數(shù)的功能和用途,采用動(dòng)詞加名詞的形式,且長(zhǎng)度為6-18個(gè)字符。如getCurrentPage, isPrimeNumber,printArray
一切函數(shù)都應(yīng)該以小寫字母開(kāi)頭,無(wú)論是常規(guī)函數(shù)還是靜態(tài)函數(shù),無(wú)論其是公有,私有還是保護(hù)。
現(xiàn)舉例如下:
C:createNegotitaion()
R:getNegotitaion(),searchNegotitaion()
U:updateNegotitaion()
D:deleteNegotitaion()
H:handleDeal()
表示判斷的:isActive(),hasBuyer(),canDelete()
9. 注釋的寫法規(guī)范
注釋用來(lái)描述代碼中復(fù)雜晦澀的部分,它必須能清楚的解釋代碼的意圖而不僅僅是復(fù)述代碼,如果有些事情在代碼中不是很明顯,那么就必須要加入注釋。不要把注釋當(dāng)作不恰當(dāng)?shù)陌惷兞亢瘮?shù)名的補(bǔ)救措施,它只是代碼的有效補(bǔ)充。
一般來(lái)說(shuō),在定義,分支,循環(huán)和重要的語(yǔ)義段前都要加上注釋,在嚴(yán)格的商業(yè)項(xiàng)目中,
注釋一般占到代碼量的1/3左右。多行注釋使用/*….*/,單行注釋使用//。類,公有函數(shù)和成員變量一定要有清晰而規(guī)范的注釋。
類的注釋:
類的注釋主要包含以下幾點(diǎn):功能,作者,創(chuàng)建時(shí)間,修改者,修改時(shí)間
/**
* 功能: XXXXXXXX
* 作者: XXX
* 時(shí)間: XXXX-XX-XX XX:XX:XX
* 修改者: XXX
* 修改時(shí)間: XXXX-XX-XX XX:XX:XX
*/
函數(shù)的注釋:
函數(shù)的注釋主要包含以下幾點(diǎn):功能,作者,創(chuàng)建時(shí)間,參數(shù)說(shuō)明
/**
* 功能: XXXXXXXXXXXXXXXXXXXXXXXX
* 作者: XXX
* 時(shí)間: XXXX-XX-XX XX:XX:XX
* 參數(shù)說(shuō)明: XXXXX
*/
成員變量和局部變量的注釋:
對(duì)于成員變量和重要的局部變量,注釋應(yīng)采用如下形式:
// 功能說(shuō)明,創(chuàng)建者,創(chuàng)建時(shí)間
如果進(jìn)行了修改,修改者應(yīng)該改寫成如下形式
// 功能說(shuō)明,創(chuàng)建者,創(chuàng)建時(shí)間;修改說(shuō)明,修改者,修改時(shí)間
循環(huán)和分支代碼段的注釋:
一般來(lái)說(shuō)循環(huán)和分支都需要注釋,它們的注釋主要包含以下幾點(diǎn):條件說(shuō)明,功能說(shuō)明
/******************
* 條件說(shuō)明,功能說(shuō)明
******************/
10. Java 格式化及良好的布局
如果你在編程過(guò)程中自覺(jué)使用空格,TAB,斷行,你就可以提高代碼的層次性,通過(guò)這
樣代碼的可讀性就能得到有效提高。
有些人在編寫代碼時(shí)依賴Ctrl+Shift+F來(lái)規(guī)整Java代碼,這是一種不好的習(xí)慣,首先它
縱容了懶惰的惡習(xí);其次Ctrl+Shift+F不是任何時(shí)候都好用的,如在使用非Eclipse的文本編輯器編寫網(wǎng)頁(yè)中的JS代碼時(shí),缺乏自動(dòng)格式化會(huì)讓你覺(jué)得舉步維艱。如果在平常編程中自覺(jué)的使用正確的縮進(jìn),即使是在記事本上你也能將代碼保持良好的層次。
適當(dāng)使用空行來(lái)區(qū)分不同的語(yǔ)義段,其實(shí)空行也是一種注釋,它意味著舊的代碼段的結(jié)
束和新的代碼段的開(kāi)始。
良好的布局并不影響執(zhí)行速度,內(nèi)存使用等程序性能,但它會(huì)讓你在日后理解代碼,檢查代碼以及修改代碼變得更容易,也是其他人在你缺位時(shí)更容易閱讀理解和修改你的代碼,編排出色的代碼會(huì)帶來(lái)視覺(jué)上和思維上的愉悅,這是非程序員不能感受到的,而精雕細(xì)琢代碼并使之達(dá)到美觀的程序員們卻會(huì)從這一過(guò)程中得到藝術(shù)的滿足。
11. Java 程序設(shè)計(jì)約定
有許多的有關(guān) Java 代碼可維護(hù)性和可改進(jìn)性的重要約定和標(biāo)準(zhǔn)。99.9% 的時(shí)間里,面向他人,面向你的開(kāi)發(fā)同事編程要比面向機(jī)器編程重要得多。使你的代碼為別人所理解是最重要的。
約定目標(biāo) | 約定 |
存取成員函數(shù) | 考慮對(duì)數(shù)據(jù)庫(kù)中的字段使用滯后初始化 使用存取函數(shù)獲得和修改所有字段 對(duì)常量采用存取函數(shù) 對(duì)于集合,加入成員函數(shù)來(lái)插入和刪除項(xiàng) 一旦可能,將存取函數(shù)置為被保護(hù)類型,不是公共類型 |
字段 | 字段永遠(yuǎn)為私有類型 不要直接訪問(wèn)字段,應(yīng)使用存取成員函數(shù) 不要使用靜態(tài)常量字段(常量),應(yīng)使用存取成員函數(shù) 不要隱藏名字 一定要初始化靜態(tài)字段 |
類 | 最小化公共和保護(hù)接口 在開(kāi)始寫代碼之前定義一個(gè)類的公共接口 按以下順序聲明一個(gè)類的字段和成員函數(shù): 構(gòu)造函數(shù) 公共成員函數(shù) 被保護(hù)成員函數(shù) 私有成員函數(shù) 私有字段 |
局部變量 | 不要隱藏名字 一行代碼只聲明一個(gè)局部變量 用一個(gè)行內(nèi)注釋說(shuō)明局部變量 在使用局部變量之前聲明它 僅將局部變量專注于一件事 |
成員函數(shù) | 給代碼加上注釋 給代碼分段 使用空白,控制結(jié)構(gòu)之前用一個(gè)空行,成員函數(shù)之前用兩個(gè)空行 一個(gè)成員函數(shù)應(yīng)能在 30 秒內(nèi)讓人理解 寫短小單獨(dú)的命令行 盡量限制成員函數(shù)的可見(jiàn)性 說(shuō)明操作的順序 |
12. Java 命名約定補(bǔ)充
除了以下幾個(gè)特例之外,命名時(shí)應(yīng)始終采用完整的英文描述符。此外,一般應(yīng)采用小寫字母,但類名、接口名以及任何非初始單詞的第一個(gè)字母要大寫。
檢查點(diǎn):
??使用完整的英文描述符
??采用適用于該領(lǐng)域的術(shù)語(yǔ)
??采用大小寫混合使名字可讀
??盡量少用縮寫,但如果用了,要明智地使用,易于理解。
??避免使用長(zhǎng)的名字(最好小于18個(gè)字母)
??避免使用類似的名字,或者僅僅是大小寫不同的名字
??避免使用下劃線
操作項(xiàng) | 命名約定 | 示例 |
實(shí)參/參數(shù)
| 使用傳遞值/對(duì)象的完整的英文描述符 | customer, account |
字段/屬性 | 字段采用完整的英文描述,第一個(gè)字母小寫,任何中間單詞的首字母大寫。 | firstName, lastName, warpSpeed |
布爾型的獲取成員函數(shù) | 所有的布爾型獲取函數(shù)必須用單詞 is 做前綴。如果你遵守前文所說(shuō)的布爾字段的命名標(biāo)準(zhǔn),那么你只需將字段名賦給它即可。 | isPersistent(), isString(), isCharacter() |
類 | 采用完整的英文描述符,所有單詞的第一個(gè)字母大寫。 | Customer, SavingsAccount |
編譯單元文件 | 使用類或接口的名字,或者如果文件中除了主類之外還有多個(gè)類時(shí),加上前綴 java 來(lái)說(shuō)明它是一個(gè)源碼文件。 | Customer.java, SavingsAccount.java, Singleton.java |
組件/ 部件 | 使用完整的英文描述來(lái)說(shuō)明組件的用途,末端應(yīng)接上組件類型。 | okButton, customerList, fileMenu |
構(gòu)造函數(shù) | 使用類名 | Customer(), SavingsAccount() |
異常 | 通常采用字母 e 表示異常。第二層用ex | e, ex |
靜態(tài)常量字段(常量) | 全部采用大寫字母或者首字母大寫的方式,單詞之間用下劃線分隔。一個(gè)較好的方法是采用靜態(tài)常量獲取成員函數(shù),因?yàn)樗艽蟮靥岣吡遂`活性。 | MIN_BALANCE, DEFAULT_DATE Max_Time |
獲取成員函數(shù) | 被訪問(wèn)字段名的前面加上前綴 get。 | getFirstName(), getLastName(), getWarpSpeeed() |
接口 | 采用I前綴加上完整的英文描述符說(shuō)明接口封裝,所有單詞的第一個(gè)字母大寫。 | IRunnable, IContactable, IPrompter, ISingleton |
局部變量 | 采用完整的英文描述符,首字母小寫,但不要隱藏已有字段。例如,如果有一個(gè)字段叫 firstName,不要讓一個(gè)局部變量叫 firstName。 | grandTotal, customer, newAccount |
循環(huán)計(jì)數(shù)器 | 通常采用字母 i,j,k 或者 counter 都可以接受。 | i, j, k, counter |
包 | 采用完整的英文描述符,所有單詞都小寫。 | com.ambysoft.www. persistence.mapping |
成員函數(shù) | 采用完整的英文描述說(shuō)明成員函數(shù)功能,第一個(gè)單詞盡可能采用一個(gè)生動(dòng)的動(dòng)詞,第一個(gè)字母小寫。 | openFile(), addAccount() |
設(shè)置成員函數(shù) | 被訪問(wèn)字段名的前面加上前綴 set。 | setFirstName(), setLastName(), setWarpSpeed() |
13. Java 常用開(kāi)發(fā)術(shù)語(yǔ)表
A
o Abstract class:抽象類
o Abstract method:抽象方法
o Annotation:注釋
o Anonymous class:匿名類
o API(Application Programming Interface):應(yīng)用編程接口,由方法和語(yǔ)言構(gòu)成的庫(kù).
o ArrayList:實(shí)現(xiàn)了List接口的動(dòng)態(tài)數(shù)組
o Assertion:斷言
o Atrribute map:屬性映射
o Autoboxing:自動(dòng)裝箱,表示一個(gè)內(nèi)置類型如int和它的包裝類如Integer之間的自動(dòng)轉(zhuǎn)換
B
o Boolean function:布爾函數(shù)
o Bytecode:字節(jié)碼
C
o Casting:類型強(qiáng)制轉(zhuǎn)換
o Channel:頻道
o ClassCastException:當(dāng)一個(gè)對(duì)象引用強(qiáng)制轉(zhuǎn)換程一個(gè)不兼容的類型時(shí)出現(xiàn)的異常.
o Collection:一個(gè)表示對(duì)象組或集合的接口
o CSV(Comma-separated values):一種用于存儲(chǔ)表格數(shù)據(jù)的文件形式
o Complier:編譯器
o Compose:合成
o Composite function:復(fù)合函數(shù),通過(guò)多個(gè)函數(shù)創(chuàng)建的一個(gè)函數(shù)
D
o Decimal:十進(jìn)制
o Deep:深度
o DOM(Document Object Model):文檔對(duì)象模型,一種采用樹(shù)形表示來(lái)處理XML數(shù)據(jù)的API.
o Database:數(shù)據(jù)庫(kù)
E
o Edge:邊
o Element:元素,XML文檔中的一個(gè)節(jié)點(diǎn).
o Encapsulation:封裝
o End tag:結(jié)束標(biāo)簽
o Enum:枚舉
o Escaping:轉(zhuǎn)義
F
o Function:函數(shù)
o Fuzzy search:模糊搜索
G
o Generic:泛型
o Graph:圖
o GUI:用戶圖形界面
o Grid computing:網(wǎng)格計(jì)算
o Group:組
H
o HashMap:一個(gè)將鍵值映射到值的查找對(duì)象
o Heap memory:堆內(nèi)存
o HTML(Hyper Text Markup Language):超文本標(biāo)記語(yǔ)言
o HTTP(HyperText Tranfer Protocol):超文本傳輸協(xié)議
I
o Inheritance:繼承
o Inner class:內(nèi)部類
o Iterator:允許迭代到任何Collection類的一個(gè)接口
J
o JDBC(Java Database Connectivity):java數(shù)據(jù)庫(kù)連接,一種屬于Java核心庫(kù)的用于操作關(guān)系數(shù)據(jù)庫(kù)的API.
o JDK(Java Development Kit):java開(kāi)發(fā)工具包
o JRE(Java Runtime Environment):java運(yùn)行時(shí)環(huán)境
o JSP(Java Server Page):java服務(wù)頁(yè)
o JVM(Java Virtual machine):Java虛擬機(jī)
o JavaDoc:屬于JDK的一種文檔生成工具
o JavaScript:運(yùn)行于客戶端,用于HTML處理的一種輕量級(jí)教本語(yǔ)言,語(yǔ)法部分類似于Java.
L
o Layout:布局
o Lexical analysis:詞法分析
o Linked List:鏈表
M
o Matcher:一個(gè)用于正則表達(dá)式模式匹配的Java類
o Metadata:元數(shù)據(jù)
o Millisecond:微妙
N
o Namespace:命名空間
o Neural network:神經(jīng)網(wǎng)絡(luò)
o Node:節(jié)點(diǎn)
O
o Object-oriented programmming:面向?qū)ο缶幊?/span>
o Object pool:可以從中獲得對(duì)象的一個(gè)實(shí)例池
o Origin:原點(diǎn)
o Override:子類覆寫父類的方法
P
o Parser:分析器
o Patch:補(bǔ)丁
o Pattern:模式
o Polymorphism:多態(tài)性
o Port:端口
o Predicate:謂詞
o Prefix:前綴
o Procedural language:過(guò)程式語(yǔ)言,如C
o Property:屬性
R
o Real time:實(shí)時(shí)
o Recursive:遞歸
o Reference:引用
o Reflection:反射
o Regular expression:正則表達(dá)式
o Relative:相對(duì)
o Resource:資源
o Runnable:多線程編程使用的一個(gè)接口.
S
o Syntax:語(yǔ)法
o Screen scraping:屏幕抓取
o Split:分割
o State:狀態(tài)
o Static:靜態(tài)
o Sequence:序列
o Swing:構(gòu)建在AWT上更高級(jí)的圖形用戶界面
o Synchronized:同步,用于線程安全協(xié)作的技術(shù)
T
o Tag:標(biāo)簽
o Thread:進(jìn)程
o Tiger : Sun給Java1.5的代號(hào)
o Token:標(biāo)記
o Translation:平移
o Triple:三元組
o Type:類型
U
o Unicode:統(tǒng)一字符界面
o Unit testing:單元測(cè)試
V
o Visitor pattern:訪問(wèn)者模式
W
o WAR(Web Application Archive):Web應(yīng)用程序歸檔
o Web Service:Web服務(wù)
o Weight:權(quán)
o Well-formed:格式良好的
o Whitespace:空白符
X
o XML(Extensible Markup Language):一種描述分級(jí)數(shù)據(jù)結(jié)構(gòu)的文本標(biāo)記語(yǔ)言