版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、源代碼編寫規(guī)范(V1.0)二0一0年一月目錄概述 3規(guī)范內(nèi)容 : 43.1 源代碼標(biāo)注規(guī)范(forC+ ) : 43.1.1 縮寫規(guī)則 43.1.2 命名規(guī)則 43.1.3 語句構(gòu)造規(guī)則 83.1.4 書寫格式規(guī)則 93.1.5 注釋規(guī)則 93.2 源代碼標(biāo)注規(guī)范(forASP) 123.2.1 編碼約定概述 123.2.2 常數(shù)命名規(guī)則 123.2.3 變量命名規(guī)則 123.2.4 變量作用域 133.2.5 變量作用域前綴 133.2.6 描述性變量名和過程名 133.2.7 對(duì)象命名規(guī)則 133.2.8 代碼注釋約定 143.2.9 格式化代碼 153.3源代碼標(biāo)注規(guī)范(forJava
2、) 173.3.1 命名規(guī)范 173.3.2 Java文件的樣式規(guī)則183.3.3 代碼編寫格式 213.3.4 Swing 253.3.5 調(diào)試 253.3.6 性能 25可移植性 26概述一) 編寫目的為了健全公司軟件源代碼的管理,增加源代碼的可讀性,提高軟件開發(fā) 效率,特編寫些規(guī)范。此規(guī)范并非源代碼編寫的一個(gè)標(biāo)準(zhǔn),而是作為一個(gè)參 考,以培養(yǎng)開發(fā)人員良好的編程習(xí)慣。二)范圍開發(fā)時(shí)源代碼的命名、注釋規(guī)范(包括 ASP, C/C+,JAVA )規(guī)范內(nèi)容:3.1 源代碼標(biāo)注規(guī)范(for C+ ):3.1.1 縮寫規(guī)則-縮寫后一個(gè)單詞的長(zhǎng)度宜為3-6個(gè)字母。-縮寫后應(yīng)能辨認(rèn)出原意。右:盡量使用公認(rèn)
3、的縮寫習(xí)慣,女口: Window縮寫為 Win; SmartPoint 縮寫為sp。3.1.2 命名規(guī)則使用含義鮮明、描述性的英文單詞或縮寫命名; 命名由字母、數(shù) 字和下劃線構(gòu)成,一般情況下不得超過 32個(gè)字符;命名建議采 用組合詞的方式。3.1.2.1 變量命名規(guī)則-一般性規(guī)則:由單詞(第一個(gè)單詞或其縮寫字母全部小寫,以后 單詞首字母大寫,其余的字母小寫)構(gòu)成名詞詞組,如如: int nValue;CString strTemp; CListCtrl listUserlnfo;第一個(gè)單詞(前綴)的縮寫格式原則上以匈牙利命名方式為準(zhǔn)(參見表一:匈牙利命名 法),并且原則上不建議用下劃線作為單詞
4、間的連接符:表一:匈牙利命名法前綴類型描述實(shí)例arrArray靜態(tài)數(shù)組arrPoi ntbBOOL布爾值bEn abledbyun sig ned char(BYTE)8位無符號(hào)字符byWeekchChar8位字符chGradetchTCHAR如果是 UNICODE,為16位字符tchNamei/nInt整形(其大小依賴于操作系統(tǒng))iRa ngeuUINT無符號(hào)整形(其大小依賴于操作系統(tǒng))nLen gthusun sig ned short無符號(hào)短整形usPortwWORD16位無符號(hào)值wParamlLONG32位有符號(hào)整形loffsetdwDWORD32位無符號(hào)整形dwVolumefFloa
5、t4字節(jié)浮點(diǎn)數(shù)fHighdDouble8字節(jié)浮點(diǎn)數(shù)dAm ountcyCURRENCY8字節(jié)貨幣類型cySellP*指針pDocIpFAR *遠(yuǎn)指針I(yè)pDocIpszLPSTR為32位字符串指針I(yè)pszNameIpcszLPCSTR32位常量字符串指針I(yè)pcszNameIpctszLPCTSTR如果 UNICODE 定義,為32位常量字符串指針I(yè)pctszNamebstrBSTR帶有4字節(jié)長(zhǎng)度前綴的w chart數(shù)組bstrMessagepbstrBSTR*BSTR數(shù)據(jù)類型指針pbstrMsgstrStri ngCStri ng類型的字符串strMessageochOLECHAROLECHAR
6、字符類型ochXoszOLECHAR*OLECHAR字符串類型oszXvarVARIANTVARIANT 數(shù)據(jù)類型varpvarVARIANT*VARIANT 數(shù)據(jù)類型指針pvarsaSAFEARRAYSAFEARRAY數(shù)據(jù)類型sapsaSAFEARRAY*SAFEARRAY數(shù)據(jù)類型指針psadlgCDialogWindows對(duì)話框dlgstcCStaticWindows靜態(tài)文本控件stcedtCeditWindows編輯框控件edtIsbCListBoxWindows列表控件IsbbtnCButt onWindows按鈕控件btnscbCScrollBarWindows滾動(dòng)條控件scbspn
7、CSpi nButto nCtrlWindowswe微調(diào)按鈕控件spntabCTabCtrlWindows選項(xiàng)卡控件tabrtfCRichEditCtrlWin dows富文本編輯框控件rtfsIdCSIiderCtrlWindow滑塊控件sldIistClistCtrlWindows列表控件listtreCtreeCtrlWindows樹形控件tredtcCDateTimeCtrlWindows時(shí)間選取器控件dtcprgCProgressCtrlWindows講度指示器控件prgcboCComboBoxWindows組合框控件cboilsClmaaeListWindows圖像列表ilstlb
8、CToolBarCtrlWindows 工具條控件tlbmnuCme nuWindows菜單控件mnustaCStatusBarWindows狀態(tài)條控件stawndCWndWindows 窗口wndexXWin dows X 坐標(biāo)cxcyYWindows Y 坐標(biāo)cyPtCpoi ntWindows 點(diǎn)陣hWndsizeCsizeWindows 尺寸sizereet/reCrectWindows 矩形rectpenCpe nWindows 畫筆penbrCbrushWindows 刷子brfntCfontWindows 字體fnterCOLORREFWindows 顏色值 RGBcrPMpTe
9、mp臨時(shí)變量PMpBuffhHa ndleWindows對(duì)象句柄hWndIpfnCallback指向CALLBACK函數(shù)的遠(yuǎn)指針lpfnAbortit/iteriterator迭代子itvectstd:vector標(biāo)準(zhǔn)模板庫vectmapstd:map標(biāo)準(zhǔn)模板庫mapdequestd:deque標(biāo)準(zhǔn)模板庫dequeliststd:list標(biāo)準(zhǔn)模板庫listsetstd:set標(biāo)準(zhǔn)模板庫Setmultisetstd:multiset標(biāo)準(zhǔn)模板庫multisetmultimapstd:multimap標(biāo)準(zhǔn)模板庫multimap-指針類型的變量,必須加上前綴"p",如口: int*
10、 pnValue;。-全局(靜態(tài))變量的命名規(guī)則同第一條的規(guī)定,并且必須加上前綴"g_"。-類成員(靜態(tài))變量的命名規(guī)則同第一條的規(guī)定,并且必須加上前綴"m_"。-模塊(函數(shù)/過程)內(nèi)部的重要變量命名遵循第一條的規(guī)定。右:模塊(函數(shù)/過程)內(nèi)部的靜態(tài)變量命名遵循第一條的規(guī)定,并且加上前綴"s_"。-其余變量在不損害程序易讀易懂原則的基礎(chǔ)上酌情處理。這些變量通常是模塊內(nèi)的臨時(shí)變量,如循環(huán)控制變量、數(shù)組的下標(biāo)等,它們可用縮寫進(jìn)行簡(jiǎn)化處理,如:int i;。3.1.2.2 常量命名規(guī)則,宏倂define)或者常量修飾符(const):大寫字
11、母組成的名詞詞組,單詞間用下劃線作為連接符,女如: #define INVALID_CLOSE 0;const double INVALID_CLOSE = double(O); 。枚舉類型(enum):此時(shí)的命名規(guī)則同"變量命名的一般性規(guī)則", 可參考MFC或ADO等的命名方式。3.1.2.3 函數(shù)命名規(guī)則單詞構(gòu)成的動(dòng)賓詞組,每個(gè)單詞首字母大寫,其余字母小寫。如:void DrawL ine ( void );。3.1.2.4 類命名規(guī)則-類的原型,是前綴"C"加單詞構(gòu)成的動(dòng)賓詞組,每個(gè)單詞首字母大寫,其余字母小寫。如:class CStockPack
12、et; classCPacket;。-類的實(shí)例變量,采用小寫首字母縮寫的方式定義,如:CStockPacket sp;。-在對(duì)類的成員變量和成員函數(shù)定義時(shí),要加以分類,并界定相應(yīng)的存取權(quán)限(參見表二:類成員的分類描述)表二:類成員的分類描述分類描述存取權(quán)限(依實(shí)際應(yīng)用而定)/ Con structorsPublic/ AttributesPrivate/ Operations(對(duì)于 com 組件是 /Methods )Public/ OverridablesProtected/ Impleme ntatio nPrivate3.1.2.5 結(jié)構(gòu)命名規(guī)則-結(jié)構(gòu)的原型采用組合詞的方式定義,并且全部
13、采用大寫字符的形 式。如:typedef struct tagStockTra nsDWORDdwOpe n; STOCKTRANS;-結(jié)構(gòu)的實(shí)例變量,采用小寫首字母縮寫的方式定義,女口:STOCKTRANS st;。3.1.3語句構(gòu)造規(guī)則3.131般性的原則:簡(jiǎn)單而直接,盡量避免出現(xiàn)難懂的技巧型代碼。3.1.3.2 為追求效率而出現(xiàn)的技巧型代碼,必須加上足夠詳細(xì)的注釋。3.1.3.3 對(duì)以下的規(guī)則不做硬性規(guī)定,可酌情考慮:一個(gè)函數(shù)/過程的代碼行數(shù)控制在 60行(A4打印紙可打印的行數(shù))以內(nèi)。盡量避免復(fù)雜的測(cè)試條件。避免使用過深的(3級(jí)以上)循環(huán)或條件嵌套,必要時(shí)可采用goto語句。循環(huán)或條件
14、中的語句塊控制在60行以內(nèi)。利用括號(hào)使邏輯表達(dá)式或算術(shù)表達(dá)式的運(yùn)算次序清晰直 觀。3.1.4書寫格式規(guī)則/3.1.4.1 一行一條語句,賦值語句可例外,如: i = 0, j = 1, k = 2; 。3.1.4.2 層次結(jié)構(gòu)清晰明顯:"" 與"" 各占一行。"" 所在的列與其前一行語句對(duì)齊; "" 所在的列與對(duì)應(yīng)的"" 對(duì)齊。"" 與"" 之間的語句相對(duì)縮進(jìn)一個(gè) Tab 鍵(設(shè)為 4 個(gè)空格 字符)。注釋與相關(guān)的代碼首列對(duì)齊。3.1.4.3 空行和空格一
15、組相關(guān)的函數(shù) / 過程間以一個(gè)空行分隔;組間兩個(gè)空 行。行內(nèi)注釋 (/) 部分與語句間以空格或 Tab 分隔,數(shù)量酌 情。多個(gè)函數(shù)參數(shù)或測(cè)試條件間用一個(gè)空格分隔。3.1.5 注釋規(guī)則3.1.5.1 序言性注釋 在模塊開始處簡(jiǎn)要描述模塊的功能、主要算法、接口特點(diǎn)、 重要數(shù)據(jù)等的解釋性說明。源程序(.cpp, .h etc)文件的開始處的格式(行寬80列以內(nèi)):/ 文件名稱 : OptimizeObj.cpp/ Version xxx.xx.xx/ C opyright(c) 1999-2001 APEX International (ShangHai) Inc./ 創(chuàng) 建 人: XXX/ 創(chuàng)建日
16、期 : YYYY/MM/DD/ 描 述 :/ 修 改 人: XXX/ 修改日期 : YYYY/MM/DD/ 修改原因 :/ 描 述 :/=重要函數(shù)/過程的開始處的格式 (行寬80 列以內(nèi)):/=/ 類屬: <如果是類的成員,此處填類的名稱;否則忽略>/ 函數(shù)名稱 : DemoFunc/ 參數(shù) : int nParam1 - 參數(shù)一/LPCSTR lpszParam2 -參數(shù)二/int* pnParam3 - out參數(shù)三/ 返回類型 : BOOL/TRUE - 成功/FALSE - 失敗/ 功能描述 :/ 全局變量 :/ 調(diào)用模塊 :/ 備 注 : pnParam3 需要調(diào)用者釋放
17、內(nèi)存/ 創(chuàng) 建 人: XXX/ 創(chuàng)建日期 : YYYY/MM/DD/ 描 述 :/ 修 改 人: XXX/ 修改日期 : YYYY/MM/DD/ 修改原因 :/3.1.5.2 數(shù)據(jù)說明注釋函數(shù) / 過程中重要的變量必須加上注釋,一行定義一個(gè)變 量,注釋放在行尾。3.1.5.3 插入性注釋在程序中間與一段代碼有關(guān)的解釋性說明。對(duì)于大段的功能相關(guān)代碼的注釋從行首開始,與前面的 代碼段分隔一行。對(duì)于小段 (三四行以內(nèi) )代碼的注釋放在語句末或下一行3.2 源代碼標(biāo)注規(guī)范(for ASP )在編寫asp程序時(shí),主要用到 HPML javascript 、vbscript 等語言,下面 將以vbscri
18、pt為例詳細(xì)說明編寫規(guī)范,javascript語言規(guī)范請(qǐng)參考vbscript 。3.2.1編碼約定概述編碼約定是幫助您使用Microsoft Visual Basic Script ingEdition編寫代碼的一些建議。編碼約定包含以下內(nèi)容:«對(duì)象、變量和過程的命名規(guī)則注釋約定*文本格式和縮進(jìn)指南使用一致的編碼約定的主要原因是使腳本或腳本集的結(jié)構(gòu)和編碼樣式標(biāo) 準(zhǔn)化,這樣代碼易于閱讀和理解。使用好的編碼約定可以使源代碼明白、 易讀、準(zhǔn)確,更加直觀且與其他語言約定保持一致。3.2.2 常數(shù)命名規(guī)則VBScript的早期版本不允許創(chuàng)建用戶自定義常數(shù)。如果要使用常數(shù),則 常數(shù)以變量的方式實(shí)
19、現(xiàn),且全部字母大寫以和其他變量區(qū)分。常數(shù)名中 的多個(gè)單詞用下劃線(_)分隔。例如:USER_LIST_MAXNEW_LINE這種標(biāo)識(shí)常數(shù)的方法依舊可行,但您還可以選擇其他方案,用Const語 句創(chuàng)建真正的常數(shù)。這個(gè)約定使用大小寫混合的格式,并以“con”作為 常數(shù)名的前綴。例如:conY ourOw nCon sta nt3.2.3 變量命名規(guī)則為提高易讀和一致性,請(qǐng)?jiān)?VBScript代碼中使用以下變量命名規(guī)則:子類型前綴示例Boolea nblnblnFoundBytebytbytRasterDataDate (Time)dPMdPMStartDoubledbldblTolera neeE
20、rrorerrerrOrderNumIn tegerintin tQua ntityLo nglngIn gDista neeObjectobjobjCurre ntSi nglesngsn gAverageStri ngstrstrFirstName324 變量作用域變量應(yīng)定義在盡量小的作用域中。VBScript變量的作用域如下所示:作用域聲明變量處可見性過程級(jí)事件、函數(shù)或子過程。在聲明變量的過程中可 見。Script 級(jí)HPML頁面的 HEAD部分,任何過 程之外。在腳本的所有過程中可 見。325 變量作用域前綴隨著腳本代碼長(zhǎng)度的增加,有必要快速區(qū)分變量的作用域。在類型前綴 前面添加一個(gè)單
21、字符前綴可以實(shí)現(xiàn)這一點(diǎn),而不致使變量名過長(zhǎng)。作用域前綴示例過程級(jí)"無dblVelocityScript 級(jí)s_s bl nCalcI nProgress326 描述性變量名和過程名變量名或過程名的主體應(yīng)使用大小寫混合格式,并且盡量完整地描述其 目的。另外,過程名應(yīng)以動(dòng)詞開始,例如In itNameArray 或CloseDialog。對(duì)于經(jīng)常使用的或較長(zhǎng)的名稱,推薦使用標(biāo)準(zhǔn)縮寫以使名稱保持在適當(dāng) 的長(zhǎng)度內(nèi)。通常多于32個(gè)字符的變量名會(huì)變得難以閱讀。使用縮寫時(shí), 應(yīng)確保在整個(gè)腳本中保持一致。例如,在一個(gè)腳本或腳本集中隨意切換 Cnt和Count將造成混亂。3.2.7對(duì)象命名規(guī)則F表列出
22、了 VBScript 中可能用到的對(duì)象命名規(guī)則(推薦):對(duì)象類型前綴示例3D面板pnlpnl Group動(dòng)畫按鈕anian iMailBox復(fù)選框CHKchkReadO nly組合框、下拉列表框cbocboE nglish命令按鈕cmdcmdExit公共對(duì)話框digdigFiieOpe n框架frafraLa nguage水平滾動(dòng)條hsbhsbVoiume圖像imgimgIc on標(biāo)簽iblibiHeiPMessage直線linii nV erticai列表框1stistPoiicyCodes旋鈕spnspnPages文本框txttxtLastName垂直滾動(dòng)條vsbvsbRate滑塊sids
23、idScaie328代碼注釋約定所有過程的開始部分都應(yīng)有描述其功能的簡(jiǎn)要注釋。這些注釋并不描述 細(xì)節(jié)信息(如何實(shí)現(xiàn)功能),這是因?yàn)榧?xì)節(jié)有時(shí)要頻繁更改。這樣就可 以避免不必要的注釋維護(hù)工作以及錯(cuò)誤的注釋。細(xì)節(jié)信息由代碼本身及 必要的內(nèi)部注釋來描述。當(dāng)傳遞給過程的參數(shù)的用途不明顯,或過程對(duì)參數(shù)的取值范圍有要求時(shí), 應(yīng)加以說明。如果過程改變了函數(shù)和變量的返回值(特別是通過參數(shù)引 用來改變),也應(yīng)在過程的開始部分描述該返回值。過程開始部分的注釋應(yīng)包含以下區(qū)段標(biāo)題。相關(guān)樣例,請(qǐng)參閱后面的“格 式化代碼”部分。區(qū)段標(biāo)題注釋內(nèi)容目的過程的功能(不是實(shí)現(xiàn)功能的方法)。假設(shè)其狀態(tài)影響此過程的外部變量、控件或其他
24、兀 素的列表。效果過程對(duì)每個(gè)外部變量、控件或其他兀素的影響 效果的列表。輸入每個(gè)目的不明顯的參數(shù)的解釋。每個(gè)參數(shù)都應(yīng) 占據(jù)單獨(dú)一行并有其內(nèi)部注釋。返回返回值的解釋。請(qǐng)記住以下幾點(diǎn):*每個(gè)重要的變量聲明都應(yīng)有內(nèi)部注釋,描述變量的用途。*應(yīng)清楚地命名變量、控件和過程,僅在說明復(fù)雜細(xì)節(jié)時(shí)需要內(nèi)部注釋。應(yīng)在腳本的開始部分包含描述該腳本的概述,列舉對(duì)象、過程、運(yùn)算 法則、對(duì)話框和其他系統(tǒng)從屬物。有時(shí)一段描述運(yùn)算法則的假碼是很 有用的。329格式化代碼應(yīng)盡可能多地保留屏幕空間,但仍允許用代碼格式反映邏輯結(jié)構(gòu)和嵌套。 以下為幾點(diǎn)提示:標(biāo)準(zhǔn)嵌套塊應(yīng)縮進(jìn) 4個(gè)空格。過程的概述注釋應(yīng)縮進(jìn) 1個(gè)空格。概述注釋后的最
25、高層語句應(yīng)縮進(jìn) 4個(gè)空格,每一層嵌套塊再縮進(jìn) 4個(gè)空格。在每個(gè)asp文件的開頭需要按一下規(guī)范編碼:文件名稱:OptimizeObj.aspVersi on xxx.xx.xxC opyright(c) 1999-2001 APEX International (ShangHai) Inc.創(chuàng)建人:XXX倉U建日期:YYYY/MM/DD描述:修改人:XXX修改日期:YYYY/MM/DD修改原因:描述:F列代碼符合VBScript函數(shù)編碼規(guī)范函數(shù)名稱:DemoFunc參數(shù):n Param1 -參數(shù)一lpszParam2 -參數(shù)pn Param3參數(shù)三返回:功能描述:備注:創(chuàng)建人:XXX倉U建日期:
26、YYYY/MM/DD描述:修 改 人: XXX 修改日期 : YYYY/MM/DD 修改原因 :Function intFindUser (strUserList(), strTargetUser)Dim i ' Loop counter.Dim blnFound ' 找到目標(biāo)標(biāo)志intFindUser = -1i = 0 ' 初始化循環(huán)計(jì)數(shù)器Do While i <= Ubound(strUserList) and Not blnFoundIf strUserList(i) = strTargetUser Then blnFound = True '將標(biāo)
27、志設(shè)置為 TrueintFindUser = i '將返回值設(shè)置成循環(huán)計(jì)數(shù)End Ifi = i + 1 '遞增循環(huán)計(jì)數(shù)器LoopEnd Function3.3 源代碼標(biāo)注規(guī)范( for Java )3.3.1命名規(guī)范Package 的命名Package 的名字應(yīng)該都是由一個(gè)小寫單詞組成。Class 的命名Class 的名字必須由大寫字母開頭而其他字母都小寫的單詞組成Class 變量的命名 變量的名字必須用一個(gè)小寫字母開頭。后面的單詞用大寫字母開頭。Static Final 變量的命名Static Final 變量的名字應(yīng)該都大寫,并且指出完整含義。參數(shù)的命名 參數(shù)的名字必須和
28、變量的命名規(guī)范一致。數(shù)組的命名 數(shù)組應(yīng)該總是用下面的方式來命名:byte buffer;而不是:byte buffer;方法的參數(shù)使用有意義的參數(shù)命名,如果可能的話,使用和要賦值的字段一樣的名字:setCounter(int size)this.size = size;3.3.2Java 文件的樣式規(guī)則所有的 Java(*.java) 文件都必須遵守如下的樣式規(guī)則版權(quán)信息版權(quán)信息必須在 java 文件的開頭,比如:/* Copyright ? 2000 Shanghai XXX Co. Ltd.* All right reserved.*/其他不需要出現(xiàn)在 javadoc 的信息也可以包含在這
29、里。Package/Importspackage 行要在 import 行之前, import 中標(biāo)準(zhǔn)的包名要在本地的包名之前,而且按照 字母順序排列。如果 import 行中包含了同一個(gè)包中的不同子目錄,則應(yīng)該用 * 來處 理。package .stats;import java.io.*;import java.util.Observable;import hotlava.util.Application;這里 java.io.* 使用來代替 InputStream and OutputStream的。Class 接下來的是類的注釋,一般是用來解釋類的。/* A class represe
30、nting a set of packet and byte counters* It is observable to allow it to be watched, but only* reports changes when the current set is complete*/接下來是類定義,包含了在不同的行的 extends 和 implementspublic class CounterSetextends Observableimplements CloneableClass Fields接下來是類的成員變量:* Packet counters*/protected int
31、packets;public 的成員變量必須生成文檔(JavaDoc)。proceted、private 禾口 package 定義的成員變量如果名字含義明確的話,可以沒有注釋。存取方法接下來是類變量的存取的方法。 它只是簡(jiǎn)單的用來將類的變量賦值獲取值的話, 可以簡(jiǎn) 單的寫在一行上。* Get the counters* return an array containing the statistical data. This array has been* freshly allocated and can be modified by the caller.*/public int get
32、Packets() return copyArray(packets, offset); public int getBytes() return copyArray(bytes, offset); public int getPackets() return packets; public void setPackets(int packets) this.packets = packets; 其它的方法不要寫在一行上構(gòu)造函數(shù) 接下來是構(gòu)造函數(shù),它應(yīng)該用遞增的方式寫(比如:參數(shù)多的寫在后面)。 訪問類型 ("public", "private"等.)
33、和 任何 "static", "final"或"synchronized" 應(yīng)該在一行中,并且方法和參數(shù)另寫一行,這樣可以使方法和參數(shù)更 易讀。publicCounterSet(int size)this.size = size;克隆方法clone 方法:如果這個(gè)類是可以被克隆的,那么下一步就是publicObject clone() try CounterSet obj = (CounterSet)super.clone();obj.packets = (int)packets.clone();obj.size = size;ret
34、urn obj;catch(CloneNotSupportedException e) throw new InternalError("Unexpected CloneNotSUpportedException: " + e.gePMessage();類方法 下面開始寫類的方法:* Set the packet counters* (such as when restoring from a database)*/ protected final void setArray(int r1, int r2, int r3, int r4)throws IllegalArgu
35、mentException/ Ensure the arrays are of equal size/if (r1.length != r2.length | r1.length != r3.length | r1.length != r4.length) throw new IllegalArgumentException("Arrays must be of the same size");System.arraycopy(r1, 0, r3, 0, r1.length);System.arraycopy(r2, 0, r4, 0, r1.length);toStrin
36、g 方法 無論如何,每一個(gè)類都應(yīng)該定義 toString 方法:publicString toString() String retval = "CounterSet: "for (int i = 0; i < data.length(); i+) retval += data.bytes.toString(); retval += data.packets.toString();return retval;main 方法如果 main(String) 方法已經(jīng)定義了 , 那么它應(yīng)該寫在類的底部3.3.3 代碼編寫格式代碼樣式代碼應(yīng)該用 unix 的格式,而不是 wi
37、ndows 的(比如:回車變成回車 + 換行)文檔化必須用 javadoc 來為類生成文檔。不僅因?yàn)樗菢?biāo)準(zhǔn),這也是被各種 java 編譯器都認(rèn)可的方法。 使用 author 標(biāo)記是不被推薦的, 因?yàn)榇a 不應(yīng)該是被個(gè)人擁有的。縮進(jìn)縮進(jìn)應(yīng)該是每行 2個(gè)空格 . 不要在源文件中保存 Tab 字符 . 在使用不同的 源代碼管理工具時(shí) Tab 字符將因?yàn)橛脩粼O(shè)置的不同而擴(kuò)展為不同的寬度 . 如果你使用 UltrEdit 作為你的 Java 源代碼編輯器的話, 你可以通過如 下操作來禁止保存 Tab字符,方法是通過UltrEdit 中先設(shè)定Tab使用 的長(zhǎng)度室 2 個(gè)空格,然后用 Format|Tab
38、s to Spaces 菜單將 Tab 轉(zhuǎn)換為 空格。頁寬頁寬應(yīng)該設(shè)置為 80字符. 源代碼一般不會(huì)超過這個(gè)寬度 , 并導(dǎo)致無法完 整顯示 , 但這一設(shè)置也可以靈活調(diào)整 . 在任何情況下 , 超長(zhǎng)的語句應(yīng)該 在一個(gè)逗號(hào)或者一個(gè)操作符后折行 . 一條語句折行后 , 應(yīng)該比原來的語 句再縮進(jìn) 2 個(gè)字符 . 對(duì) 中的語句應(yīng)該單獨(dú)作為一行 . 例如, 下面的第 1行是錯(cuò)誤的 , 第 2行是正確的:if (i>0) i + ; /錯(cuò)誤, 和 在同一行if (i>0)i +; /正確, 單獨(dú)作為一行 語句永遠(yuǎn)單獨(dú)作為一行 . 語句應(yīng)該縮進(jìn)到與其相對(duì)應(yīng)的 那一行相對(duì)齊的位置。括號(hào)左括號(hào)和后一個(gè)
39、字符之間不應(yīng)該出現(xiàn)空格 , 同樣 , 右括號(hào)和前一個(gè)字符之 間也不應(yīng)該出現(xiàn)空格 . 下面的例子說明括號(hào)和空格的錯(cuò)誤及正確使用 :CallProc( AParameter ); / 錯(cuò)誤CallProc(AParameter); / 正確不要在語句中使用無意義的括號(hào) . 括號(hào)只應(yīng)該為達(dá)到某種目的而出現(xiàn)在 源代碼中。下面的例子說明錯(cuò)誤和正確的用法 :if (I) = 42) / 錯(cuò)誤 - 括號(hào)毫無意義if (I = 42) or (J = 42) / 正確 - 的確需要括號(hào)exit()exit 除了在 main 中可以被調(diào)用外,其他的地方不應(yīng)該調(diào)用。因?yàn)檫@樣 做不給任何代碼有機(jī)會(huì)來截獲退出。 一個(gè)
40、類似后臺(tái)服務(wù)地程序不應(yīng)該因?yàn)?某一個(gè)庫模塊決定了要退出就退出。異常申明的錯(cuò)誤應(yīng)該拋出一個(gè) RuntimeException 或者派生的異常。頂層的 main() 函數(shù)應(yīng)該截獲所有的異常,并且打印(或者記錄在日志中)在屏幕上。垃圾收集JAVA使用成熟的后臺(tái)垃圾收集技術(shù)來代替引用計(jì)數(shù)。但是這樣會(huì)導(dǎo)致一 個(gè)問題:你必須在使用完對(duì)象的實(shí)例以后進(jìn)行清場(chǎng)工作。比如一個(gè) perl 的程序員可能這么寫:FileOutputStream fos = new FileOutputStream(projectFile); project.save(fos, "IDE Project File")
41、;除非輸出流一出作用域就關(guān)閉,非引用計(jì)數(shù)的程序語言,比如JAVA,是不能自動(dòng)完成變量的清場(chǎng)工作的。必須象下面一樣寫:FileOutputStream fos = new FileOutputStream(projectFile);project.save(fos, "IDE Project File");fos.close();clone下面是一種有用的方法:implements CloneablepublicObject clone()try ThisClass obj = (ThisClass)super.clone();obj.field1 = (int)field1
42、.clone();obj.field2 = field2;return obj; catch(CloneNotSupportedException e) throw new InternalError("Unexpected CloneNotSUpportedException: " + e.gePMessage();final 類 絕對(duì)不要因?yàn)樾阅艿脑驅(qū)㈩惗x為 final 的(除非程序的框架要求) 如果一個(gè)類還沒有準(zhǔn)備好被繼承, 最好在類文檔中注明, 而不要將她定義 為 final 的。這是因?yàn)闆]有人可以保證會(huì)不會(huì)由于什么原因需要繼承她。問類的成員變量 大部分的類成員
43、變量應(yīng)該定義為 protected 的來防止繼承類使用他們。 注意,要用 "int packets" ,而不是 "int packets" ,后一種永遠(yuǎn)也不 要用。public void setPackets(int packets) this.packets = packets; CounterSet(int size) this.size = size;byte 數(shù)組轉(zhuǎn)換到 characters為了將 byte 數(shù)組轉(zhuǎn)換到 characters ,你可以這么做:"Hello world!".getBytes();Utility 類
44、Utility 類(僅僅提供方法的類) 應(yīng)該被申明為抽象的來防止被繼承或被 初始化。初始化 下面的代碼是一種很好的初始化數(shù)組的方法:objectArguments = new Object arguments ;枚舉類型JAVA 對(duì)枚舉的支持不好,但是下面的代碼是一種很有用的模板:class Colour public static final Colour BLACK = new Colour(0, 0, 0);public static final Colour RED = new Colour(0xFF, 0, 0);public static final Colour GREEN =
45、new Colour(0, 0xFF, 0);public static final Colour BLUE = new Colour(0, 0, 0xFF);public static final Colour WHITE = new Colour(0xFF, 0xFF, 0xFF); 這種技術(shù)實(shí)現(xiàn)了 RED, GREEN,BLUE 等可以象其他語言的枚舉類型一樣使用的 常量。 他們可以用 '=' 操作符來比較。 但是這樣使用有一個(gè)缺陷:如果一個(gè)用戶用這樣的方法來創(chuàng)建顏色 BLACK new Colour(0,0,0)那么這就是另外一個(gè)對(duì)象, '=' 操作符就會(huì)產(chǎn)生錯(cuò)誤。她的 equal() 方法仍 然有效。由于這個(gè)原因,這個(gè)技術(shù)的缺陷最好注明在文檔中,或者只在自己 的包中使用。3.3.4 Swing避免使用 AWT 組件混合使用 AWT 和 Swing 組件如果要將 AWT 組件和 Swing 組件混
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 未來職業(yè)的規(guī)劃愿景計(jì)劃
- 主管工作計(jì)劃
- 納米AlN的紅外光譜分析
- 秋冬季老年人如何養(yǎng)生保健
- 小賣部合作協(xié)議書范文合同范本
- 單因素交互作用簡(jiǎn)單效應(yīng)分析
- 工廠車間流水線承包合同協(xié)議書范文
- 結(jié)婚七年紀(jì)念日送離婚協(xié)議書范文
- 中醫(yī)講高血壓課件
- 漳平市宏都房地產(chǎn)開發(fā)有限公司介紹企業(yè)發(fā)展分析報(bào)告
- 江蘇省常州市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)
- 除鹽水站純水設(shè)備調(diào)試實(shí)施方案
- XX二中校園LED顯示屏應(yīng)急預(yù)案
- 第一單元我的視頻類故事第一節(jié)認(rèn)識(shí)數(shù)字故事課件
- 2022憲法及民法典知識(shí)競(jìng)賽題庫及答案
- 小學(xué)綜合實(shí)踐二年級(jí)上冊(cè)第3單元《主題活動(dòng)一:發(fā)現(xiàn)影子》教案
- 象棋社團(tuán)活動(dòng)教案小學(xué)象棋社團(tuán)活動(dòng)教案
- 新北師大版八年級(jí)上冊(cè)英語(全冊(cè)知識(shí)點(diǎn)語法考點(diǎn)梳理、重點(diǎn)題型分類鞏固練習(xí))(家教、補(bǔ)習(xí)、復(fù)習(xí)用)
- 統(tǒng)編版 高中歷史 選擇性必修一 第三單元 第9課 近代西方的法律與教化 課件(共53張PPT)
- 罪犯的權(quán)利與義務(wù)
- 部編版八年級(jí)語文上冊(cè)《回憶我的母親》導(dǎo)學(xué)案(集體備課;定稿)
評(píng)論
0/150
提交評(píng)論