JAVA源代碼規(guī)范.doc_第1頁
JAVA源代碼規(guī)范.doc_第2頁
JAVA源代碼規(guī)范.doc_第3頁
JAVA源代碼規(guī)范.doc_第4頁
JAVA源代碼規(guī)范.doc_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

JAVA 代碼規(guī)范 1 JAVAJAVA 代碼規(guī)范代碼規(guī)范 初稿 2004 4 JAVA 代碼規(guī)范 2 版本更新信息版本更新信息 本版本創(chuàng)建 修改 維護 批準(zhǔn)涉及人員如下 創(chuàng)建 修改者 XX 維護者 XX 批準(zhǔn)者 XX 具體版本更新記錄如表 1 1 表表 1 11 1 版本更新記錄版本更新記錄 版本號 修改確 認(rèn)日期 修改人修改位置 修改方式 AMD 修改內(nèi)容概述 V1 02004 4 XX 全部 A 初始版本發(fā)布 修改方式 修改方式 A 增加 增加 M 修改 修改 D 刪 刪 除除 JAVA 代碼規(guī)范 3 目的目的 本文提供一整套編寫高效可靠的 Java 代碼的標(biāo)準(zhǔn) 約定和指南 它們以安 全可靠的軟件工程原則為基礎(chǔ) 使代碼易于理解 維護和增強靈活性 通過遵循 一套通用的程序設(shè)計標(biāo)準(zhǔn) 顯著提高 Java 軟件開發(fā)者的生產(chǎn)效率 為開發(fā)團隊 的程序設(shè)計帶來更大的一致性 使軟件開發(fā)團隊的效率明顯提高 規(guī)范的執(zhí)行規(guī)范的執(zhí)行 本文檔適用于公司內(nèi)進行軟件開發(fā)的所有技術(shù)人員 即公司內(nèi)軟件開發(fā)人員 編寫的所有源代碼都必須遵循本規(guī)范 除臨時性項目之外的任何項目均應(yīng)嚴(yán)格按照此標(biāo)準(zhǔn)執(zhí)行 臨時性項目 指 為市場推廣目的而編寫的示程序 為一次性用途而編寫的臨時性小程序 為學(xué)習(xí)目的而編寫的測試程序 文檔類別文檔類別 本文檔屬標(biāo)準(zhǔn)規(guī)范類的項目限制級文檔 未經(jīng)總經(jīng)理及總經(jīng)理授權(quán)人員批準(zhǔn) 不得提供公司以外的人員閱讀和使用 版本更新條件版本更新條件 本文檔的定期評審時間為每年的 1 月 評審及修訂步驟依據(jù) SEPG 工作規(guī)范 規(guī)定 此外 如遇下列條件可進行評審 并根據(jù)評審結(jié)果決定是否需要進行修訂 本文檔所列的引用的標(biāo)準(zhǔn)已經(jīng)更新 本文檔的使用者若對本文檔有任何評論 建議或意見 請通過企業(yè)內(nèi)部 網(wǎng)絡(luò)發(fā)電子郵件給 SEPG 所收到的電子郵件將會在評審和修訂時給予 充分的考慮 使用對象使用對象 本文檔的使用對象包括 項目管理者 質(zhì)量保證人員 軟件開發(fā)人員 JAVA 代碼規(guī)范 4 目目 錄錄 1介紹介紹 7 1 1為什么要有編碼規(guī)范 7 2通用代碼格式通用代碼格式 7 2 1文件組織 7 2 2縮進 8 2 3行長度 8 2 4換行 8 2 5空行 10 2 6空格 10 2 7注釋 11 2 7 1注釋約定 11 2 7 2實現(xiàn)注釋的格式 12 2 7 3文檔注釋 13 2 7 4快速瀏覽 javadoc 13 2 8聲明 14 2 8 1每行聲明變量的數(shù)量 14 2 8 2初始化 14 2 8 3布局 15 2 8 4類和接口的聲明 15 2 9語句 16 2 9 1簡單語句 16 2 9 2復(fù)合語句 16 2 9 3返回語句 16 2 9 4if if else if else if else語句 16 2 9 5for語句 17 2 9 6while語句 17 2 9 7do while語句 17 2 9 8switch語句 17 2 9 9try catch語句 18 2 10SQL 18 3命名規(guī)范命名規(guī)范 19 3 1總則 19 3 2項目命名 19 3 3命名規(guī)則 20 3 4變量命名機制 20 3 4 1基本類型變量命名規(guī)則 變量類型標(biāo)識 邏輯名 20 3 4 2一般常用對象命名規(guī)則 21 3 4 3臨時變量命名規(guī)則 22 3 4 4全局變量 成員變量 局部變量命名規(guī)則 22 JAVA 代碼規(guī)范 5 3 4 5常量命名機制 22 3 5HTML 元素變量命名機制 22 3 6JSP 文件命名機制 22 4類 接口 包和編譯單元的標(biāo)準(zhǔn)類 接口 包和編譯單元的標(biāo)準(zhǔn) 23 4 1類的標(biāo)準(zhǔn) 23 4 1 1命名類 23 4 1 2注釋類 23 4 2接口標(biāo)準(zhǔn) 24 4 2 1命名接口 24 4 2 2注釋接口 24 4 3包的標(biāo)準(zhǔn) 24 4 3 1命名包 24 4 3 2注釋包 25 4 4編譯單元標(biāo)準(zhǔn) 25 4 4 1命名編譯單元 25 4 4 2注釋編譯單元 25 5字段標(biāo)準(zhǔn)字段標(biāo)準(zhǔn) 字段 字段 屬性 屬性 26 5 1字段可見性 26 5 2注釋一個字段 26 5 3使用存取成員方法 27 5 3 1存取函數(shù)的可見性 27 5 3 2一定要初始化靜態(tài)字段 27 6成員函數(shù)和方法標(biāo)準(zhǔn)成員函數(shù)和方法標(biāo)準(zhǔn) 28 6 1命名函數(shù)和成員方法 28 6 2命名存取成員函數(shù)和方法 28 6 3命名構(gòu)造函數(shù) 29 6 4成員函數(shù)和方法的可見性 29 6 5成員函數(shù)和方法參數(shù)標(biāo)準(zhǔn) 30 6 5 1命名參數(shù) 30 6 5 2注釋參數(shù) 30 6 6注釋成員函數(shù)和方法 30 7編程慣例編程慣例 32 7 1提供對實例以及類變量的訪問控制 32 7 2引用類變量和類方法 32 7 3常量 32 7 4變量賦值 32 8其它慣例其它慣例 33 8 1圓括號 33 8 2返回值 33 8 3條件運算符 前的表達式 33 JAVA 代碼規(guī)范 6 8 4特殊注釋 34 9代碼范例代碼范例 34 9 1源文件范例 34 10縮寫說明縮寫說明 35 11參考資料參考資料 36 JAVA 代碼規(guī)范 7 1 介紹介紹 1 1 為什么要有編碼規(guī)范為什么要有編碼規(guī)范 編碼規(guī)范對于程序員而言尤為重要 有以下幾個原因 一個軟件產(chǎn)品的 80 的生命期是在維護 幾乎沒有一個軟件在它的整個生命期里都是被它的作者來維護的 使用好的風(fēng)格提高了軟件的可維護性 如果源代碼和軟件產(chǎn)品是捆綁給客戶的 作為產(chǎn)品的剩余部分 它應(yīng)該 有好的分包 well packaged 足夠清晰和專業(yè)的代碼 2 通用代碼格式通用代碼格式 2 1文件組織文件組織 一個文件由被空行分割而成的段落以及標(biāo)識每個段落的可選注釋共同組成 超過 2000 行的程序難以閱讀 應(yīng)該盡量避免 Java 源文件必須遵循以下規(guī)則 文件頭部注釋 所有的源文件都應(yīng)該在開頭有一個 C 語言風(fēng)格的注釋 其中列出文件名 作者 公司 日期 描述 修改說明和版權(quán)聲明 File OrderSessionBean java Author wangxie Version 1 1 Date 06 04 2004 Modify Description Copyright notice 包和引入語句 在 Java 源文件中 第一個非注釋行是 Package 語句 Package 行要在 Import 行之前 Import 中標(biāo)準(zhǔn)的包名要在本地的包名之前 而且按照字母順 序排列 例如 package java awt import java awt peer CanvasPeer import java io InputStream import cn edu cuit TestApplication JAVA 代碼規(guī)范 8 類和接口聲明 下表描述了類和接口聲明的各個部分以及它們出現(xiàn)的先后次序 序號 類 接口聲明的各部分注解 1 類 接口文檔注釋 該注釋中所需包含的信息 2類或接口的聲明 3 類 接口實現(xiàn)的注釋 如果有必要 的話 該注釋應(yīng)包含任何有關(guān)整個類或接口的信息 而這些信息又不 適合作為類 接口文檔注釋 4類的 靜態(tài) 變量 首先是類的公共變量 隨后是保護變量 再后是包一級別的變 量 沒有訪問修飾符 access modifier 最后是私有變量 5實例變量 首先是公共級別的 隨后是保護級別的 再后是包一級別的 沒 有訪問修飾符 最后是私有級別的 6構(gòu)造器 7方法 這些方法應(yīng)該按功能 而非作用域或訪問權(quán)限 分組 例如 一個私有的類方法可以置于兩個公有的實例方法之間 其目的 是為了更便于閱讀和理解代碼 2 2縮進縮進 4 個空格常被作為縮進排版的一個單位 以表示縮進 顯示程序的層次級別 增加程序的可讀性 不要在源代碼中保留 tab 字符 這是因為 tab 字符會隨著 不同用戶的不同設(shè)置和不同的資源管理工具 打印 文檔 版本控制等 而代表 不同的寬度 2 3行長度行長度 盡量避免一行的長度超過 80 個字符 因為很多終端和工具不能很好處理之 注意 用于文檔中的例子應(yīng)該使用更短的行長 長度一般不超過 70 個字符 2 4換行換行 當(dāng)一個表達式無法容納在一行內(nèi)時 可以依據(jù)如下一般規(guī)則斷開之 在一個逗號后面斷開 在一個操作符前面斷開 寧可選擇較高級別 higher level 的斷開 而非較低級別 lower level 的 斷開 新的一行應(yīng)該與上一行同一級別表達式的開頭處對齊 如果以上規(guī)則導(dǎo)致你的代碼混亂或者使你的代碼都堆擠在右邊 那就 代之以縮進 8 個空格 以下是斷開方法調(diào)用的一些例子 someMethod longExpression1 longExpression2 longExpression3 JAVA 代碼規(guī)范 9 longExpression4 longExpression5 var someMethod1 longExpression1 someMethod2 longExpression2 longExpression3 以下是兩個斷開算術(shù)表達式的例子 前者更好 因為斷開處位于括號表 達式的外邊 這是個較高級別的斷開 longName1 longName2 longName3 longName4 longName5 4 longname6 PREFFER longName1 longName2 longName3 longName4 longName5 4 longname6 AVOID 以下是兩個縮進方法聲明的例子 前者是常規(guī)情形 后者若使用常規(guī)的 縮進方式將會使第二行和第三行移得很靠右 所以代之以縮進 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ī)縮進 4 個空格 會使語句體 看起來比較費勁 比如 不要使用如下縮進 if condition1 易使這行被忽視 使用如下縮進 if condition1 JAVA 代碼規(guī)范 10 或者使用如下縮進 if condition1 這里有三種可行的方法用于處理三元運算表達式 alpha aLongBooleanExpression beta gamma alpha aLongBooleanExpression beta gamma alpha aLongBooleanExpression beta gamma 2 5空行空行 空行將邏輯相關(guān)的代碼段分隔開 以提高可讀性 下列情況應(yīng)該總是使用兩 個空行 一個源文件的兩個片段 section 之間 類聲明和接口聲明之間 下列情況應(yīng)該總是使用一個空行 兩個方法之間 方法內(nèi)的局部變量和方法的第一條語句之間 塊注釋或單行注釋之前 一個方法內(nèi)的兩個邏輯段之間 用以提高可讀性 2 6空格空格 下列情況應(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 JAVA 代碼規(guī)范 11 while d s n printSize size is foo n for 語句中的表達式應(yīng)該被空格分開 例如 for expr1 expr2 expr3 強制轉(zhuǎn)型后應(yīng)該跟一個空格 例如 myMethod byte aNum Object x myMethod int cp 5 int i 3 1 2 7注釋注釋 Java 程序有兩類注釋 實現(xiàn)注釋 implementation comments 和文檔注釋 document comments 實現(xiàn)注釋是那些在 C 中見過的 使用 和 界定的注 釋 文檔注釋 被稱為 doc comments 是 Java 獨有的 并由 界定 文檔注 釋可以通過 javadoc 工具轉(zhuǎn)換成 HTML 文件 注意 頻繁的注釋有時反映出代碼的低質(zhì)量 當(dāng)你覺得被迫要加注釋的時候 考注意 頻繁的注釋有時反映出代碼的低質(zhì)量 當(dāng)你覺得被迫要加注釋的時候 考 慮一下重寫代碼使其更清晰 慮一下重寫代碼使其更清晰 2 7 1注釋約定注釋約定 注釋應(yīng)該增加代碼的清晰度 注釋應(yīng)該增加代碼的清晰度 代碼注釋的目的是要使代碼更易于被同 時參與程序設(shè)計的開發(fā)人員以及其他后繼開發(fā)人員理解 避免使用裝飾性內(nèi)容 也就是說 不要使用象廣告橫幅那樣的注釋語避免使用裝飾性內(nèi)容 也就是說 不要使用象廣告橫幅那樣的注釋語 句 句 典型的是用星號將他們的內(nèi)部注釋圈起來 這只是在大量浪費時 間 并不能給最終的產(chǎn)品增加絲毫價值 保持注釋的簡潔 保持注釋的簡潔 最好的注釋應(yīng)該是簡單明了的注釋 注釋不必洋洋 灑灑 只需提供足夠的信息 使別人能夠理解你的代碼 先寫注釋 后寫代碼 先寫注釋 后寫代碼 寫代碼注釋的最好方法是在寫代碼之前就寫注 釋 這使你在寫代碼之前可以想想代碼的功能和運行 而且這樣確保 不會遺漏注釋 另一種方法是邊寫代碼邊寫注釋 因為注釋可以使代 碼更易理解 所以在程序開發(fā)的過程中 也可以利用這一點 如果打 算花些時間寫注釋 那么至少你應(yīng)從這個過程中獲得些什么 注釋信息不僅要包括代碼的功能 還應(yīng)給出原因 注釋信息不僅要包括代碼的功能 還應(yīng)給出原因 例如 下面例子中 的代碼顯示金額在 1 000 以上 包括 1 000 的定單可給予 5 的折 扣 為什么要這樣做呢 難道有一個商業(yè)法則規(guī)定大額定單可以得到 折扣嗎 這種給大額定單的特殊是有時限的呢 還是一直都這樣 最 初的程序設(shè)計者是否只是由于慷慨大度才這樣做呢 除非它們在某個 地方 或者是在源代碼本身 或者是在一個外部文檔里 被注釋出來 否則你不可能知道這些 JAVA 代碼規(guī)范 12 例 if grandTotal 1000 00 grandTotal grandTotal 0 95 2 7 2實現(xiàn)注釋的格式實現(xiàn)注釋的格式 程序可以有 4 種實現(xiàn)注釋的風(fēng)格 塊 block 單行 single line 尾端 trailing 和 行末 end of line 塊注釋 塊注釋通常用于提供對文件 方法 數(shù)據(jù)結(jié)構(gòu)和算法的描述 塊注 釋被置于每個文件的開始處以及每個方法之前 它們也可以被用于其他 地方 比如方法內(nèi)部 在功能和方法內(nèi)部的塊注釋應(yīng)該和它們所描述的 代碼具有一樣的縮進格式 塊注釋之首應(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 單行注釋 短注釋可以顯示在一行內(nèi) 并與其后的代碼具有一樣的縮進層級 如果一個注釋不能在一行內(nèi)寫完 就該采用塊注釋 參見 塊注釋 單行 注釋之前應(yīng)該有一個空行 以下是一個 Java 代碼中單行注釋的例子 if condition Handle the condition 尾端注釋 極短的注釋可以與它們所要描述的代碼位于同一行 但是應(yīng)該有足 夠的空白來分開代碼和注釋 若有多個短注釋出現(xiàn)于大段代碼中 它們 應(yīng)該具有相同的縮進 以下是一個 Java 代碼中尾端注釋的例子 if a 2 return TRUE special case else return isPrime a works only for odd a JAVA 代碼規(guī)范 13 行末注釋 注釋界定符 可以注釋掉整行或者一行中的一部分 它一般不用 于連續(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 2 7 3文檔注釋文檔注釋 文檔注釋描述 Java 的類 接口 構(gòu)造器 方法 以及字段 field 每個文檔 注釋都會被置于注釋定界符 之中 一個注釋對應(yīng)一個類 接口或成員 該 注釋應(yīng)位于聲明之前 The Example class provides public class Example 注意頂層 top level 的類和接口是不縮進的 而其成員是縮進的 描述類和接 口的文檔注釋的第一行 不需縮進 隨后的文檔注釋每行都縮進 1 格 使星號 縱向?qū)R 成員 包括構(gòu)造函數(shù)在內(nèi) 其文檔注釋的第一行縮進 4 格 隨后每 行都縮進 5 格 若你想給出有關(guān)類 接口 變量或方法的信息 而這些信息又不適合寫在文 檔中 則可使用實現(xiàn)塊注釋或緊跟在聲明后面的單行注釋 例如 有關(guān)一個類實 現(xiàn)的細(xì)節(jié) 應(yīng)放入緊跟在類聲明后面的實現(xiàn)塊注釋中 而不是放在文檔注釋中 文檔注釋不能放在一個方法或構(gòu)造器的定義塊中 因為 Java 會將位于文檔注釋 之后的第一個聲明與其相關(guān)聯(lián) 2 7 4快速瀏覽快速瀏覽 javadoc javadoc 的程序可以處理 Java 的源代碼文件 并且為 Java 程序產(chǎn)生 HTML 文 件形式的外部注釋文檔 Javadoc 支持一定數(shù)目的標(biāo)記 標(biāo)識注釋文檔中各段起 JAVA 代碼規(guī)范 14 始位置的保留字 詳情請參考 J2SDK javadoc 文檔 標(biāo)記標(biāo)記用于用于目的目的 author name類 接口 說明特定某一段程序代碼的作者 每一個作 者各有一個標(biāo)記 deprecated類 成員函數(shù) 說明該類的應(yīng)用程序編程接口 API 已被廢 棄 因此應(yīng)不再使用 exception name description成員函數(shù)說明由成員函數(shù)發(fā)出的異常 一個異常采用 一個標(biāo)記 并要給出異常的完整類名 param name description成員函數(shù)用來說明傳遞給一個成員函數(shù)的參數(shù) 其中 包括參數(shù)的類型 類和用法 每個參數(shù)各有一 個標(biāo)記 return description成員函數(shù)若成員函數(shù)有返回值 對該返回值進行說明 應(yīng)說明返回值的類型 類和可能的用途 since類 成員函數(shù)說明自從有 JDK 1 1 以來 該項已存在了多 長時間 see ClassName類 接口 成 員函數(shù) 字段 在文檔中生成指向特定類的超文本鏈接 可 以并且應(yīng)該采用完全合法的類名 see ClassName member functionName 類 接口 成 員函數(shù) 字段 在文檔中生成指向特定成員函數(shù)的超文本鏈 接 可以并且應(yīng)該采用完全合法的類名 version text類 接口說明特定一段代碼的版本信息 2 8 聲明聲明 2 8 1每行聲明變量的數(shù)量每行聲明變量的數(shù)量 推薦一行一個聲明 因為這樣以利于寫注釋 亦即 int level indentation level int size size of table 要優(yōu)于 int level size 不要將不同類型變量的聲明放在同一行 例如 int foo fooarray 避免 注意 上面的例子中 在類型和標(biāo)識符之間放了一個空格 2 8 2初始化初始化 在聲明局部變量的同時初始化 唯一不這么做的理由是變量的初始值依 賴于某些先前發(fā)生的計算 JAVA 代碼規(guī)范 15 2 8 3布局布局 只在代碼塊的開始處聲明變量 一個塊是指任何被包含在一對大括號 和 中間的代碼 不要在首次用到該變量時才聲明之 這會把注意力 不集中的程序員搞糊涂 同時會妨礙代碼在該作用域內(nèi)的可移植性 void myMethod int int1 0 在方法的開始處 if condition int int2 0 在 if 塊的開始處 該規(guī)則的一個例外是 for 循環(huán)的索引變量 for int i 0 i maxLoops i 避免聲明的局部變量覆蓋上一級聲明的變量 例如 不要在內(nèi)部代碼塊 中聲明相同的變量名 int count myMethod if condition int count 0 避免 2 8 4類和接口的聲明類和接口的聲明 當(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 JAVA 代碼規(guī)范 16 int emptyMethod 2 9語句語句 2 9 1簡單語句簡單語句 每行至多包含一條語句 例如 argv 正確 argc 正確 argv argc 避免 2 9 2復(fù)合語句復(fù)合語句 復(fù)合語句是包含在大括號中的語句序列 形如 語句 例如下面各段 大括號中的語句應(yīng)該較之復(fù)合語句縮進一個層次 左大括號 應(yīng)位于復(fù)合語句起始行的行尾 右大括號 應(yīng)另起一 行并與復(fù)合語句首行對齊 大括號可以被用于所有語句 包括單個語句 只要這些語句是諸如 if else 或 for 控制結(jié)構(gòu)的一部分 這樣便于添加語句而無需擔(dān)心由 于忘了加括號而引入 bug 2 9 3返回語句返回語句 一個帶返回值的 return 語句不使用小括號 除非它們以某種方式使返 回值更為顯見 例如 return return myDisk size return size size defaultSize 2 9 4if if else if else if else 語句語句 if else 語句應(yīng)該具有如下格式 if condition statements if condition statements else statements if condition statements else if condition statements JAVA 代碼規(guī)范 17 else statements 注意 if 語句總是用 和 括起來 避免使用如下容易引起錯誤的格式 if condition 避免 省略 statement 2 9 5for 語句語句 一個 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)末尾 為更新子句 使用單獨的語句 2 9 6while 語句語句 一個 while 語句應(yīng)該具有如下格式 while condition statements 一個空的 while 語句應(yīng)該具有如下格式 while condition 2 9 7do while 語句語句 一個 do while 語句應(yīng)該具有如下格式 do statements while condition 2 9 8switch 語句語句 一個 switch 語句應(yīng)該具有如下格式 switch condition case ABC statements falls through case DEF statements break JAVA 代碼規(guī)范 18 case XYZ statements break default statements break 每當(dāng)一個 case 順著往下執(zhí)行時 因為沒有 break 語句 通常應(yīng)在 break 語 句的位置添加注釋 上面的示例代碼中就包含注釋 falls through 每個 switch 語句應(yīng)包括一個 default 選項 default 選項里的 break 是冗余 的 但可預(yù)防以后增加另一個選項后沒有中斷執(zhí)行導(dǎo)致錯誤的情況出現(xiàn) 2 9 9try catch 語句語句 一個 try catch 語句應(yīng)該具有如下格式 try statements catch ExceptionClass e statements 一個 try catch 語句后面也可能跟著一個 finally 語句 不論 try 代碼塊是否順 利執(zhí)行完 它都會被執(zhí)行 try statements catch ExceptionClass e statements finally statements 2 10 SQL SQL 語句中所有的關(guān)鍵字大寫 主語句太長需換行時 要求縮進四個空格 子語句提行書寫并縮 進一個四個空格 當(dāng) where 后帶有兩個以上的條件時 條件 需換行書寫 如有邏輯符號則應(yīng)寫在每個條件語句的前面 例如 SELECT 字段 1 字段 2 字段 3 Count FROM 表 1 表 2 WHERE 條件 1 AND 條件 2 OR 條件 3 GROUP BY 字段 1 字段 2 字段 3 JAVA 代碼規(guī)范 19 ORDER BY 字段 1 字段 2 DESC 字段 3 3 命名規(guī)范命名規(guī)范 3 1總則總則 凡在精聯(lián)公司內(nèi)進行開發(fā)的任何軟件項目的命名 無論是項目名稱 文件名 數(shù)據(jù)庫名 表名 字段名 SQL 存貯過程名 變量名 函數(shù)名 類名 組件名 均應(yīng)符合以下規(guī)定 名稱全部由下劃線 英文字母和數(shù)字組成 在以下情況下可以在名稱中出現(xiàn)數(shù)字 用于命名版本 項目版本 文件版本 函數(shù)版本等 用于臨時性的小程序 如演示程序 測試程序 編程學(xué)習(xí)程序等 的變 量命名 因特殊原因兩個對象 指項目 文件 數(shù)據(jù)庫等 一定要具有相同的英 文名稱時 如果系統(tǒng)限制名稱長度 如某些數(shù)據(jù)庫管理系統(tǒng)中表的命名 低于 32 位字 符 則以系統(tǒng)限制為標(biāo)準(zhǔn) 否則任何對象 指項目 文件 數(shù)據(jù)庫等 的名 稱均不得超過 32 個字符 命名文件時擴展名不計 除以下情況外 名稱全部應(yīng)由有意義的英文單詞 當(dāng)英文單詞很難表達 時 可以變通采用漢字拼音 組成 并且不超過 5 個英文單詞 Word 文檔的命名 命名數(shù)據(jù)庫 表 字段名時用到的開頭特定字符 mc 臨時性項目 如演示程序 測試程序 編程學(xué)習(xí)程序等 3 2項目命名項目命名 一般來說 項目名稱有兩個含義 一是該項目的通用名 如 合理用藥系統(tǒng) 主要用于公司內(nèi)部交流 它可以是中文也可以是英文 且不受本規(guī)范的限制 二是該項目在開發(fā)人員進行代碼管理時用的英文縮寫名 如 PASS 它用于項 目在計算機上的管理 此處主要討論后一種命名 項目名稱由該項目的負(fù)責(zé)人指定 項目名稱用于以下場合 如命名 Visual Source Safe 項目名 命名該項目在開發(fā)人員本地計算機的工作文件夾名 命名 WSAD 的 ear 文件名 命名用于保存 拷貝 壓縮 電郵傳遞等場合的文件夾名或文件名 一般情況下項目名不應(yīng)含版本信息 如遇特殊情況 由可考慮用數(shù)字和下劃 線的方式來指定版本 如 PASS 2 0 表示 PASS 2 0 版 規(guī)范的項目名稱如 規(guī)范的項目名稱如 項目通用名稱 健康信息管理系統(tǒng) 項目名稱 PIMS Visual Source Safe 項目名 PIMS JAVA 代碼規(guī)范 20 該項目各開發(fā)人員在本地計算機上的工作文件夾名 PIMS WSAD 項目文件名 PIMS 如導(dǎo)出該項目壓縮成一個文件可能名稱為 PIMS ear 3 3命名規(guī)則命名規(guī)則 命名規(guī)范使程序更易讀 從而更易于理解 它們也可以提供一些有關(guān)標(biāo)識符 功能的信息 以助于理解代碼 例如 不論它是一個常量 包 還是類 3 4 變量命名機制變量命名機制 3 4 1基本類型變量命名規(guī)則 變量類型標(biāo)識基本類型變量命名規(guī)則 變量類型標(biāo)識 邏輯名邏輯名 變量類型標(biāo)識用于標(biāo)識該變量所存儲的數(shù)據(jù)類型 小寫字母開頭 標(biāo)識符類型命名規(guī)則例子 包 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 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 JAVA 代碼規(guī)范 21 邏輯名為變量所具有的表示具體應(yīng)用含義的名稱 要做到見名知意 書寫時要以字母開頭 首字母大寫 基本變量類型標(biāo)識 定義如下 Type Prefix short s int i n char c ch double d boolean b long l float f 3 4 2一般常用對象命名規(guī)則一般常用對象命名規(guī)則 以下為一些常用對象前綴 如果有些對象不在以下表格中 請將該對象類名小寫做為前 綴 常用對象前綴 如下 Type Prefix Type Prefix Short short Boolean boolean Integer int Long long Char char Float flt Object obj String str Date dt Event event Demenstion obj Size size Color clr Context ctx Connection conn RecordSet rs Statement stmt Command cmd Window wnd Frame frame Dialog dlg File file Button btnSocket skt Image img InputStream ins OutputStream outs PrintStream ps Request request resq Response response resp Double dbl 例如 int nCount long lLength Object objResult String strUserName JAVA 代碼規(guī)范 22 Frame frameMain 3 4 3 臨時變量命名規(guī)則臨時變量命名規(guī)則 一般臨時變量沒有一個具體的意思 所以一般臨時變量名為 Temp 或 Tmp 其中有一些為 C 語言 或 Fortan 延續(xù)下來的常見臨時變量也可以接受 如 i j k 一般用于表示一個臨時整型變量 如 int nTemp I String strTemp Boolean bTmp long lTem 3 4 4全局變量 成員變量 局部變量命名規(guī)則全局變量 成員變量 局部變量命名規(guī)則 局部變量 指在一個程序模塊中聲明使用的變量 該類變量使用 3 3 中定義的命名規(guī)則 以后稱一般命名 全局變量 一般為多個模塊公有 所以在命名區(qū)別于局部變量 要在 一般命名的變量名前加上前綴 g 如 int g nUserCount 成員變量 是指類成員變量 用于表示類的一種或一類屬性 要在一 般命名的變量名前加上前綴 m 如 String m strName 3 4 5 常量命名機制常量命名機制 在 Java 中常量名一般為大寫 單詞之間用 分隔 如 public static final int MAX USER COUNT 100 3 5 HTML 元素變量命名機制元素變量命名機制 form name frmFormName hidden text 首字母大寫 不用下劃線 如 ClientID OrderID UserName Passwd etc button submit btnButtonName 如 3 6 JSP 文件命名機制文件命名機制 JSP 文件命名方式 首字母大寫 不用下劃線 如 OrderSearch jsp ClientMng jsp JAVA 代碼規(guī)范 23 4 類 接口 包和編譯單元的標(biāo)準(zhǔn)類 接口 包和編譯單元的標(biāo)準(zhǔn) 4 1類的標(biāo)準(zhǔn)類的標(biāo)準(zhǔn) 4 1 1命名類命名類 標(biāo)準(zhǔn) Java 約定是使用完全的英文描述符 所有單詞的第一個字母要大寫 并且單詞中大小寫混合 類名應(yīng)是單數(shù)形式 舉例 Customer Employee Order OrderItem FileStream String 4 1 2注釋類注釋類 以下的信息應(yīng)寫在文檔注釋中緊靠類的定義的前面 1 類的目的 類的目的 開發(fā)者需要了解一個類的一般目的 以判斷這個類是否滿 足他們的需求 養(yǎng)成一個注釋與類有關(guān)的任何好東西的習(xí)慣 例如 它是否是一個模式的一部分 或是使用它時有什么要引起注意的限制 2 已知的問題 已知的問題 如果一個類有任何突出的問題 應(yīng)說明出來 讓其他的 開發(fā)者了解這個類的缺點 難點 此外 還應(yīng)注明為什么不解決問題 的原因 注意 如果問題僅僅針對一個成員方法 那么它應(yīng)直接與那 個成員方法相聯(lián)系 3 類的開發(fā)類的開發(fā) 維護歷史 維護歷史 通常要包含一個歷史記錄表 列出日期 類的作 者和修改概要 這樣做的目的是讓進行維護的程序員了解過去曾對一 個類所做的修改 是誰做了什么樣的修改 4 注釋出采用的不變量 注釋出采用的不變量 不變量是指一套有關(guān)實例或類在所有 穩(wěn)定 時間片內(nèi)為 真 的聲明 穩(wěn)定時間片 是指在一個成員函數(shù)被對 象 類調(diào)用之前和立刻調(diào)用之后的時間 通過說明一個類的不變量 你讓其他的開發(fā)者了解應(yīng)該如何使用一個類 5 并行策略并行策略 任何采用 Runnable 接口的類應(yīng)充分說明它的并行策略 對許多程序員來說 并行編程是一個新的而且復(fù)雜的題目 所以需要 投入一些額外的時間來確保人們能夠讀懂你的東西 說明你的并行策 略以及為什么選取這個策略而不是其它策略這很重要 常用的并行策 略 包括下面一些內(nèi)容 同步對象 停滯 balking 對象 警戒 guarded 對象 版本 versioned 對象 同步策略控制器 接收器 JAVA 代碼規(guī)范 24 例例 A class representing a window on the screen For example Window win new Window parent win show seeawt BaseWindow seeawt Button version1 2 2004 4 9 author wangxie class Window extends BaseWindow 4 2接口標(biāo)準(zhǔn)接口標(biāo)準(zhǔn) 4 2 1命名接口命名接口 在接口名前加前綴在接口名前加前綴 I 建議在一個接口名的前面附加上字母 I 結(jié) 果使名字變?yōu)槿?ISingleton 或 IRunnable 這樣 這種方法有助于將接口名與 類和包的名字區(qū)分開來 4 2 2注釋接口注釋接口 以下的信息應(yīng)寫在文檔注釋中緊靠接口定義的前面 目的 目的 在其他開發(fā)者應(yīng)用一個接口之前 他們需要理解接口封裝的概念 換句話說 他們需要了解接口的目的 一個好的檢測是否有必要定義一 個接口的方法是你是否可以很容易地說明它的目的 如果說明起來有困 難 很可能從一開始起就不需要這個接口 在 Java 中接口的概念較新 所以人們對如何正確使用它們還不是很有經(jīng)驗 常常濫用它們 它應(yīng)如何被使用以及如何不被使用 它應(yīng)如何被使用以及如何不被使用 開發(fā)者需要了解接口應(yīng)如何使用以 及如何不被使用 因為成員方法的標(biāo)識在接口中定義 所以對于每個成員方法的標(biāo)識應(yīng)遵 循 2 7 中的注釋約定 4 3包的標(biāo)準(zhǔn)包的標(biāo)準(zhǔn) 4 3 1命名包命名包 關(guān)于包的命名有幾條規(guī)則 按順序來說 這些規(guī)則是 標(biāo)識符用點號分隔開來 標(biāo)識符用點號分隔開來 為了使包的名字更易讀 Sun 公司建議包名中 的標(biāo)識符用點號來分隔 例如 包名 java awt 含有兩個標(biāo)識符 java 和 JAVA 代碼規(guī)范 25 awt Sun 公司的標(biāo)準(zhǔn)公司的標(biāo)準(zhǔn) java 分配包用標(biāo)識符分配包用標(biāo)識符 java 開頭 開頭 Sun 保有這種權(quán)利 使 得無論你的 Java 開發(fā)環(huán)境的零售商是怎樣的 標(biāo)準(zhǔn) java 包的命名始終一 致 局部包的名字中的第一個標(biāo)識符不能都是大寫 局部包的名字中的第一個標(biāo)識符不能都是大寫 所謂局部包是指那些在 你的機構(gòu)內(nèi)部使用 不會應(yīng)用到其他機構(gòu)中去的包 這樣的包的名字的 例子有 persistence mapping relational 和 interface screens 全局包的名字用你的機構(gòu)的全局包的名字用你的機構(gòu)的 Internet 保留域名開頭 保留域名開頭 一個要應(yīng)用到多個機構(gòu)的包應(yīng) 包含創(chuàng)建機構(gòu)的域名 并且最高層的域名類型要大寫 4 3 2注釋包注釋包 應(yīng)保證有一個或者多個外部文檔以說明你的機構(gòu)所創(chuàng)建的包的用途 對 于每個包 應(yīng)說明 包的基本原理 包的基本原理 其他開發(fā)者需要了解一個包是用來做什么的 這樣他們 才能判斷是否可以用它 如果是一個共享包 他們可以判斷是否需要改 進或是擴展它 包中的類 包中的類 在包中要包含一個類和接口的列表 每個類或接口用簡短的 一行文字來說明 以便讓其他的開發(fā)者了解這個包中含有什么 4 4編譯單元標(biāo)準(zhǔn)編譯單元標(biāo)準(zhǔn) 4 4 1命名編譯單元命名編譯單元 編譯單元 在這個情況下是一個源碼文件 應(yīng)被賦予文件內(nèi)定義的主要 的類或接口的名字 用與包或類相同的名字命名文件 大小寫也應(yīng)相同 擴 展名 java 應(yīng)作為文件名的后綴 例 例 Customer java Singleton java SavingsAccount java 4 4 2注釋編譯單元注釋編譯單元 雖然應(yīng)努力使一個文件中只包含一個類或接口 但是有時在一個文件中 定義數(shù)個類 或者接口 也可理解 一般的經(jīng)驗規(guī)則是 如果類 B 的唯一用 途是封裝只被類 A 需要的功能 那么可以理解類 B 出現(xiàn)在與類 A 相同的源碼 文件中 下面的文檔約定應(yīng)用于一個源碼文件 而不具體到類 對于有幾個類的文件 列出每一個類 對于有幾個類的文件 列出每一個類 如果一個文件包含多個類 則應(yīng) 給出一個類的列表 并且簡要地說明每個類 文件名和文件名和 或標(biāo)識信息 或標(biāo)識信息 文件名應(yīng)包含在它的頂端 好處是如果代碼被打 印出來了 你會知道源碼文件是什么 版權(quán)信息 版權(quán)信息 若可能 應(yīng)說明文件的所有版權(quán)信息 通常的做法是說明版 權(quán)的年份和版權(quán)持有個人 機構(gòu)的名字 注意 代碼的作者可能不是版權(quán) 持有者 JAVA 代碼規(guī)范 26 5 字段標(biāo)準(zhǔn)字段標(biāo)準(zhǔn) 字段 字段 屬性 屬性 5 1字段可見性字段可見性 當(dāng)字段被聲明為 protected 類型時 子類中的成員函數(shù)可能會直接訪問它 增加了類的耦合性 這使類更難維護和加強 所以應(yīng)該盡量避免 字段不應(yīng) 被直接訪問 而應(yīng)采用存取成員函數(shù) 參見下文 訪問 可見性可見性說明說明正確用法正確用法 public一個公共字段可被任何其他 對象或者類中的成員函數(shù)訪 問 盡量不要讓字段公有 protecte d 被保護的字段可被它聲明時 所在的類及該類的子類的所 有成員函數(shù)訪問 盡量不要讓字段被保護 private私有字段只可以被它聲明時 所在的類的其它成員函數(shù)調(diào) 用 該類子類中的函數(shù)不可 以調(diào)用 所有的字段都應(yīng)盡可能置為 私有 由獲取和設(shè)置成員函 數(shù) 存取函數(shù) 訪問 5 2注釋一個字段注釋一個字段 所有的字段都應(yīng)很好地加以注釋 以便其他開發(fā)者理解它 要想有效地 注釋 以下的部分需要說明 字段的說明 字段的說明 使用 javadoc 來描述字段的用途和約束 在注釋中增加如下 標(biāo)簽 see string see UR L see classname methodname 注釋出所有采用的不變量 注釋出所有采用的不變量 字段中的不變量是指永遠(yuǎn)為 真 的條件 例如 字段 dayOfMonth 的不變量可能是它的值只能在 1 到 31 之間 顯 然 可以用基于某一年里的某個月份來限制這個字段值 使其變的更加 復(fù)雜 通過說明字段值的限制條件 有助于定義重要的業(yè)務(wù)規(guī)則 使代 碼更易理解 示例 示例 對于那些有復(fù)雜業(yè)務(wù)規(guī)則與之相關(guān)聯(lián)的字段 應(yīng)提供幾個例子 使它們?nèi)菀桌斫?一個例子常象一幅畫 它抵得上幾千個詞語 并行事件 并行事件 對眾多程序開發(fā)者來說 并行性是一個新而復(fù)雜的概念 事 實上 即使對有經(jīng)驗的并行程序開發(fā)者來說 并行性也是一個老但卻復(fù) 雜的課題 最終結(jié)果是 如果應(yīng)用了 Java 的并行編程特性 那么你應(yīng)在 程序中詳細(xì)地注釋出來 可見性決策 可見性決策 如果聲明了一個非私有字段 則應(yīng)說明為什么要這樣做 JAVA 代碼規(guī)范 27 字段的可見性在上文中 第 5 1 節(jié) 字段的可見性 討論了 支持封裝 的存取成員函數(shù)的用法將在下文 第 5 3 節(jié) 使用存取成員方法 中討 論 總的來說 最好能有一個好的理由解釋為什么不將變量聲明為私有 類型 例 The current number of elements must

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論