




已閱讀5頁,還剩9頁未讀, 繼續(xù)免費閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1 Java 編程規(guī)范 1.1 排版1.1.1 規(guī)則規(guī)則1 程序塊要采用縮進(jìn)風(fēng)格編寫,縮進(jìn)的空格數(shù)為4個或者使用TAB縮進(jìn)。說明:縮進(jìn)使程序更易閱讀,建議使用空格縮進(jìn),空格縮進(jìn)可以適應(yīng)不同操作系統(tǒng)與不同開發(fā)工具。規(guī)則2 分界符(如大括號和)格式。在函數(shù)體的開始、類和接口的定義、以及if、for、do、while、switch、case語句中的程序或者static、,synchronized等語句塊中都要采用如下的縮進(jìn)方式。示例:if (ab) doStart();規(guī)則3 較長的語句、表達(dá)式或參數(shù)(80字符)要分成多行書寫,長表達(dá)式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首,劃分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊,語句可讀。示例: if (logger.isDebugEnabled() logger.debug(Session destroyed,call-id + event.getSession().getCallId(); 規(guī)則4 不允許把多個短語句寫在一行中,即一行只寫一條語句說明:閱讀代碼更加清晰 示例:如下例子不符合規(guī)范。Object o = new Object(); Object b = null; 規(guī)則5 相對獨立的程序塊之間、變量說明之后必須加空行。 說明:閱讀代碼更加清晰示例:if(a b)doStart();/此處是空行return;規(guī)則6 在兩個以上的關(guān)鍵字、變量、常量進(jìn)行對等操作時,它們之間的操作符之前、之后或者前后要加空格;進(jìn)行非對等操作時,如果是關(guān)系密切的立即操作符(如.),后不應(yīng)加空格。說明:閱讀代碼更加清晰示例:if (a = b) objectA.doStart();a *= 2;1.1.2 建議建議1 類屬性和類方法不要交叉放置,不同存取范圍的屬性或者方法也盡量不要交叉放置。格式:類定義 類的公有屬性定義 類的保護(hù)屬性定義 類的私有屬性定義 類的公有方法定義 類的保護(hù)方法定義 類的私有方法定義建議2 修飾詞按照指定順序書寫:訪問權(quán)限staticfinal 。示例:public static final String str = “abc”;1.2 注釋1.2.1 規(guī)則規(guī)則1 源程序注釋量在30以上。 規(guī)則2 包的注釋:寫入一個名為 package.html 的HTML格式的說明文件放入包所在路徑。包的注釋內(nèi)容:簡述本包的作用、詳細(xì)描述本包的內(nèi)容、產(chǎn)品模塊名稱和版本、公司版權(quán)。說明:方便JavaDoc收集,方便對包的了解示例:com/huawei/iin/websmap/comm/package.html一句話簡述。詳細(xì)描述。產(chǎn)品模塊名稱和版本公司版權(quán)信息示例:為 WEBSMAP 提供通信類,上層業(yè)務(wù)使用本包的通信類與 SMP-B 進(jìn)行通信。詳細(xì)描述。IIN V100R001 WEBSMAP(C) 版權(quán)所有 2000-2001 優(yōu)軟科技有限公司規(guī)則3 類和接口的注釋放在class 或者 interface 關(guān)鍵字之前,import 關(guān)鍵字之后。注釋主要是一句話功能簡述與功能詳細(xì)描述。類注釋使用“/* */”注釋方式說明:方便JavaDoc收集,沒有import可放在package之后。注釋可根據(jù)需要列出:作者、內(nèi)容、功能、與其它類的關(guān)系等。功能詳細(xì)描述部分說明該類或者接口的功能、作用、使用方法和注意事項,每次修改后增加作者和更新版本號和日期,since 表示從那個版本開始就有這個類或者接口,deprecated 表示不建議使用該類或者接口。/* * 一句話功能簡述 * 功能詳細(xì)描述 * author 作者(必須)* see 相關(guān)類/方法(可選) * since 產(chǎn)品/模塊版本 (必須) * deprecated (可選) */示例:package m;import java.util.*;/* * LogManager 類集中控制對日志讀寫的操作。 * 全部為靜態(tài)變量和靜態(tài)方法,對外提供統(tǒng)一接口。分配對應(yīng)日志類型的讀寫器, * 讀取或?qū)懭敕蠗l件的日志紀(jì)錄。 * author 張三,李四,王五* see LogIteraotor * see BasicLog * since CommonLog1.0 */public class LogManager規(guī)則4 類屬性(成員變量)、公有和保護(hù)方法注釋:寫在類屬性、公有和保護(hù)方法上面,注釋方式為“/* */”.示例:/* * 注釋內(nèi)容 */private String logType;/* * 注釋內(nèi)容 */public void write()規(guī)則5 公有和保護(hù)方法注釋內(nèi)容:列出方法的一句話功能簡述、功能詳細(xì)描述、輸入?yún)?shù)、輸出參數(shù)、返回值、異常等。格式:/* * 一句話功能簡述 * 功能詳細(xì)描述 * param 參數(shù)1 參數(shù)1說明 * param 參數(shù)2 參數(shù)2說明 * return 返回類型說明 * exception/throws 異常類型 異常說明 * see 類、類#方法、類#成員* since 起始版本 * deprecated */說明:since 表示從那個版本開始就有這個方法,如果是最初版本就存在的方法無需說明;exception或throws 列出可能仍出的異常;deprecated 表示不建議使用該方法。示例: /* * 根據(jù)日志類型和時間讀取日志。 * 分配對應(yīng)日志類型的LogReader, 指定類型、查詢時間段、條件和反復(fù)器緩沖數(shù), * 讀取日志記錄。查詢條件為null或0的表示沒有限制,反復(fù)器緩沖數(shù)為0讀不到日志。 * 查詢時間為左包含原則,即 startTime, endTime) 。 * param logTypeName 日志類型名(在配置文件中定義的) * param startTime 查詢?nèi)罩镜拈_始時間 * param endTime 查詢?nèi)罩镜慕Y(jié)束時間 * param logLevel 查詢?nèi)罩镜募墑e * param userName 查詢該用戶的日志 * param bufferNum 日志反復(fù)器緩沖記錄數(shù) * return 結(jié)果集,日志反復(fù)器 * since 1.2 */ public static LogIterator read(String logType, Date startTime,Date endTime, int logLevel, String userName, int bufferNum)規(guī)則6 對于方法內(nèi)部用throw語句拋出的異常,必須在方法的注釋中標(biāo)明,對于所調(diào)用的其他方法所拋出的異常,選擇主要的在注釋中說明。 對于非RuntimeException,即throws子句聲明會拋出的異常,必須在方法的注釋中標(biāo)明。說明:異常注釋用exception或throws表示,在JavaDoc中兩者等價,但推薦用exception標(biāo)注Runtime異常,throws標(biāo)注非Runtime異常。異常的注釋必須說明該異常的含義及什么條件下拋出該異常。規(guī)則7 注釋應(yīng)與其描述的代碼相近,對代碼的注釋應(yīng)放在其上方,并與其上面的代碼用空行隔開,注釋與所描述內(nèi)容進(jìn)行同樣的縮排。說明:可使程序排版整齊,并方便注釋的閱讀與理解。示例: /* * 注釋*/public void example2( ) / 注釋 CodeBlock One / 注釋 CodeBlock Two規(guī)則8 對于switch語句下的case語句,必須在每個case分支結(jié)束前加上break語句。說明:break才能真正表示該switch執(zhí)行結(jié)束,不然可能會進(jìn)入該case以后的分支。至于語法上合法的場景“一個case后進(jìn)入下一個case處理”,應(yīng)該在編碼設(shè)計上就避免。規(guī)則9 修改代碼同時修改相應(yīng)的注釋,以保證注釋與代碼的一致性。不再有用的注釋要刪除。規(guī)則10 注釋的內(nèi)容要清楚、明了,含義準(zhǔn)確,防止注釋二義性。說明:錯誤的注釋不但無益反而有害。規(guī)則11 避免在注釋中使用縮寫,特別是不常用縮寫。說明:在使用縮寫時或之前,應(yīng)對縮寫進(jìn)行必要的說明。規(guī)則12 對重載父類的方法必須進(jìn)行Override聲明說明:可清楚說明此方法是重載父類的方法,保證重載父類的方法時不會因為單詞寫錯而造成錯誤(寫錯方法名或者參數(shù)個數(shù),類型都會編譯無法通過)示例:Overridepublic void doRequest(SipServletRequest req) throws ServletException,IOException1.2.2 建議建議1 避免在一行代碼或表達(dá)式的中間插入注釋。說明:除非必要,不應(yīng)在代碼或表達(dá)中間插入注釋,否則容易使代碼可理解性變差。建議2 在代碼的功能、意圖層次上進(jìn)行注釋,提供有用、額外的信息。說明:注釋的目的是解釋代碼的目的、功能和采用的方法,提供代碼以外的信息,幫助讀者理解代碼,防止沒必要的重復(fù)注釋信息。示例:如下注釋意義不大。/ 如果 receiveFlag 為真if (receiveFlag)而如下的注釋則給出了額外有用的信息。 / 如果從連結(jié)收到消息 if (receiveFlag)建議3 對關(guān)鍵變量的定義和分支語句(條件分支、循環(huán)語句等)必須編寫注釋。說明:這些語句往往是程序?qū)崿F(xiàn)某一特定功能的關(guān)鍵,對于維護(hù)人員來說,良好的注釋幫助更好的理解程序,有時甚至優(yōu)于看設(shè)計文檔。建議4 注釋應(yīng)考慮程序易讀及外觀排版的因素,使用的語言若是中、英兼有的,建議多使用中文,除非能用非常流利準(zhǔn)確的英文表達(dá)。中文注釋中需使用中文標(biāo)點。方法和類描述的第一句話盡量使用簡潔明了的話概括一下功能,然后加以句號。接下來的部分可以詳細(xì)描述。說明:注釋語言不統(tǒng)一,影響程序易讀性和外觀排版,出于對維護(hù)人員的考慮,建議使用中文。JavaDoc工具收集簡介的時候使用選取第一句話。建議5 方法內(nèi)的單行注釋使用 /。說明:調(diào)試程序的時候可以方便的使用 /* 。*/ 注釋掉一長段程序。建議6 一些復(fù)雜的代碼需要說明。示例:這里主要是對閏年算法的說明。 /1. 如果能被4整除,是閏年; /2. 如果能被100整除,不是閏年; /3. 如果能被400整除,是閏年。建議7 使用Html標(biāo)簽使JavaDoc生成更加美觀。(1.42+)示例:/* * Returns a hash code for this string. The hash code for a * String object is computed as * * s0*31(n-1) + s1*31(n-2) + . + sn-1 * * using int arithmetic, where si is the * ith character of the string, n is the length * of * the string, and indicates exponentiation. * (The hash value of the empty string is zero.) * * return a hash code value for this object. */public int hashCode() 生成后的JavaDoc圖1 生成后的JavaDoc1.3 命名1.3.1 規(guī)則規(guī)則1 類名和接口使用類意義完整的英文描述,每個英文單詞的首字母使用大寫、其余字母使用小寫的大小寫混合法。示例:OrderInformation, CustomerList, LogManager, LogConfig, SmpTransaction規(guī)則2 方法名使用類意義完整的英文描述:第一個單詞的字母使用小寫、剩余單詞首字母大寫其余字母小寫的大小寫混合法。示例:private void calculateRate();public void addNewOrder();規(guī)則3 方法中,存取屬性的方法采用setter 和 getter方法,動作方法采用動詞和動賓結(jié)構(gòu)。格式:get + 非布爾屬性名()is + 布爾屬性名()set + 屬性名()動詞()動詞 + 賓語()示例:public String getType();public boolean isFinished();public void setVisible(boolean);public void show();public void addKeyListener(Listener);規(guī)則4 屬性名使用意義完整的英文描述,第一個單詞的字母使用小寫,剩余單詞首字母大寫其余字母小寫的大小寫混合法。屬性名不能與方法名相同。示例: private customerName;private orderNumber;private smpSession;規(guī)則5 常量名使用全大寫的英文描述,英文單詞之間用下劃線分隔開,并且使用 static final修飾。示例: public static final int MAX_VALUE = 1000;public static final String DEFAULT_START_DATE = 2001-12-08;1.3.2 建議建議1 通過對函數(shù)或過程、變量、結(jié)構(gòu)等正確的命名以及合理地組織代碼的結(jié)構(gòu),使代碼成為自注釋的。說明:清晰準(zhǔn)確的函數(shù)、變量等的命名,可增加代碼可讀性,并減少不必要的注釋。建議2 常用組件類的命名以組件名加上組件類型名結(jié)尾。示例:Application 類型的,命名以App 結(jié)尾MainAppFrame 類型的,命名以Frame 結(jié)尾TopoFramePanel 類型的,建議命名以Panel 結(jié)尾CreateCircuitPanelBean 類型的,建議命名以Bean 結(jié)尾DataAccessBeanEJB 類型的,建議命名以EJB 結(jié)尾DBProxyEJBApplet 類型的,建議命名以Applet 結(jié)尾PictureShowApplet建議3 如果函數(shù)名超過15 個字母,可采用以去掉元音字母的方法或者以行業(yè)內(nèi)約定俗成的縮寫方式縮寫函數(shù)名。示例:getCustomerInformation() 改為 getCustomerInfo()建議4 準(zhǔn)確地確定成員函數(shù)的存取控制符號:只是該類內(nèi)部調(diào)用的函數(shù)使用 private 屬性,繼承類可以使用的使用protected屬性,同包類可以調(diào)用的使用默認(rèn)屬性(不加屬性控制符號),對外公開的函數(shù)使用public屬性示例: protected void getUserName() 。private void calculateRate() 。建議5 含有集合意義的屬性命名,盡量包含其復(fù)數(shù)的意義。示例:customers, orderItems1.4 編碼1.4.1 規(guī)則規(guī)則1 數(shù)據(jù)庫操作、IO操作等需要使用結(jié)束close()的對象必須在try -catch-finally 的finally中close(),如果有多個IO對象需要close(),需要分別對每個對象的close()方法進(jìn)行try-catch,防止一個IO對象關(guān)閉失敗其他IO對象都未關(guān)閉。示例:try / . . catch(IOException ioe) /. . finally try out.close(); catch (IOException ioe) /. . try in.close(); catch (IOException ioe) /. . 規(guī)則2 運行時異常使用RuntimeException的子類來表示,不用在可能拋出異常的方法聲明上加throws子句。非運行期異常是從Exception繼承而來的,必須在方法聲明上加throws子句。說明:非運行期異常是由外界運行環(huán)境決定異常拋出條件的異常,例如文件操作,可能受權(quán)限、磁盤空間大小的影響而失敗,這種異常是程序本身無法避免的,需要調(diào)用者明確考慮該異常出現(xiàn)時該如何處理方法,因此非運行期異常必須有throws子句標(biāo)出,不標(biāo)出或者調(diào)用者不捕獲該類型異常都會導(dǎo)致編譯失敗,從而防止程序員本身疏忽。運行期異常是程序在運行過程中本身考慮不周導(dǎo)致的異常,例如傳入錯誤的參數(shù)等。拋出運行期異常的目的是防止異常擴(kuò)散,導(dǎo)致定位困難。因此在做異常體系設(shè)計時要根據(jù)錯誤的性質(zhì)合理選擇自定義異常的繼承關(guān)系。還有一種異常是Error 繼承而來的,這種異常由虛擬機(jī)自己維護(hù),表示發(fā)生了致命錯誤,程序無法繼續(xù)運行例如內(nèi)存不足。我們自己的程序不應(yīng)該捕獲這種異常,并且也不應(yīng)該創(chuàng)建該種類型的異常。規(guī)則3 注意運算符的優(yōu)先級,并用括號明確表達(dá)式的操作順序,避免使用默認(rèn)優(yōu)先級。說明:防止閱讀程序時產(chǎn)生誤解,防止因默認(rèn)的優(yōu)先級與設(shè)計思想不符而導(dǎo)致程序出錯。示例:下列語句中的表達(dá)式word = (high 8) | low (1)if (a | b) & (a & c) (2)if (a | b) (c & d) (3)如果書寫為high 8 | lowa | b & a & ca | b c & d(1)(2)雖然不會出錯,但語句不易理解;(3)造成了判斷條件出錯。規(guī)則4 避免使用不易理解的數(shù)字,用有意義的標(biāo)識來替代。涉及物理狀態(tài)或者含有物理意義的常量,不應(yīng)直接使用數(shù)字,必須用有意義的靜態(tài)變量或者枚舉來代替。示例:如下的程序可讀性差。if (state = 0) state = 1; . / program code應(yīng)改為如下形式:private final static int TRUNK_IDLE = 0;private final static int TRUNK_BUSY = 1;private final static int TRUNK_UNKNOWN = -1;if (state = TRUNK_IDLE) state = TRUNK_BUSY; . / program code注意:建議使用枚舉來表示。規(guī)則5 數(shù)組聲明的時候使用 int index ,而不要使用 int index 。說明:使用int index 格式使程序的可讀性較差,int index 表示聲明了一個int數(shù)組(int )叫做index示例:如下程序可讀性差:public int getIndex() .如下程序可讀性好:public int getIndex() .規(guī)則6 集合必須指定模板類型說明:方便程序閱讀,除去強(qiáng)制轉(zhuǎn)換代碼示例:Map map = new HashMap();規(guī)則7 一個文件不要定義兩個類(并非指內(nèi)部類)。說明:方便程序的閱讀與代碼的維護(hù)規(guī)則8 所有的數(shù)據(jù)類必須覆寫toString()方法,toString()方法返回該類有意義的內(nèi)容。(1.42+)說明:方便數(shù)據(jù)類的比較,父類如果實現(xiàn)了比較合理的toString() ,子類可以繼承不必再重寫。hashCode與equals可以使用eclipse自動生成。示例:public TopoNode private String nodeName; public String toString() return NodeName : + nodeName; 規(guī)則9 判斷語句不要使用”* = true”來判斷為真說明:方便閱讀,減少沒有必要的計算以下錯誤:if (ok = true) 以下正確:if (ok) 1.4.2 建議建議1 一個方法不應(yīng)拋出太多類型的異常。說明: 如果程序中需要分類處理,則將異常根據(jù)分類組織成繼承關(guān)系。如果確實有很多異常類型首先考慮用異常描述來區(qū)別,throws/exception子句標(biāo)明的異常最好不要超過三個。建議2 如果多段代碼重復(fù)做同一件事情,那么在方法的劃分上可能存在問題。說明:若此段代碼各語句之間有實質(zhì)性關(guān)聯(lián)并且是完成同一件功能的,那么可考慮把此段代碼構(gòu)造成一個新的方法。建議3 集合中的數(shù)據(jù)如果不使用了應(yīng)該及時釋放,尤其是可重復(fù)使用的集合。說明:由于集合保存了對象的引用,虛擬機(jī)的垃圾收集器就不會回收。建議4 源程序中關(guān)系較為緊密的代碼應(yīng)盡可能相鄰。說明:便于程序閱讀和查找。示例:矩形的長與寬關(guān)系較密切,放在一起。 rect.length = 10;rect.width = 5;建議5 不要使用難懂的技巧性很高的語句,除非很有必要時。說明:高技巧語句不等于高效率的程序,實際上程序的效率關(guān)鍵在于設(shè)計與算法。建議6 明確方法功能,精確(而不是近似)地實現(xiàn)方法設(shè)計。一個函數(shù)僅完成一件功能,即使簡單功能也編寫方法實現(xiàn)。 說明:雖然為僅用一兩行就可完成的功能去編方法好象沒有必要,但用方法可使功能明確化,增加程序可讀性,亦可方便維護(hù)、測試。建議7 盡量使用Java 5.0新循環(huán)寫法。說明:代碼更加簡潔示例:ArrayList list = new ArrayList();list.add.for(String str:list) System.out.println(str);建議8 使用枚舉來替代以前用數(shù)字與字符串的同等目的的操作。說明:以前沒有枚舉,大家都用數(shù)字或者字符串做枚舉同樣功能的事情示例:public enum EnumDemo ERROR,INFO,DEBUGIn other function:EnumDemo t = EnumDemo.DEBUG;if (t = EnumDemo.ERROR) 。 建議9 interface 中定義的常量不要寫public、static、final的修飾詞,方法不要寫public修飾詞。說明:更
溫馨提示
- 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 遼陽古建施工方案審批
- 2024年三季度報湖南地區(qū)A股銷售凈利率排名前十大上市公司
- 快船新球館施工方案
- (教研室)福建省寧德市2024-2025學(xué)年高二上學(xué)期期末考試語文試題
- 揚(yáng)塵施工方案
- 預(yù)制濾板施工方案
- 2025年柳工營銷面試題及答案
- 6年級上冊20課青山不老課堂筆記
- 教育教學(xué)評價表
- 低空經(jīng)濟(jì)產(chǎn)業(yè)專項引導(dǎo)基金
- 2024解析:第十四章內(nèi)能的利用-基礎(chǔ)練(解析版)
- 《制造業(yè)信息化》課件
- 湘教版地理八年級下冊 期末綜合測試卷(二)(含答案)
- 2024年度股權(quán)激勵代持協(xié)議
- 北師大版(2024新版)七年級上冊數(shù)學(xué)全冊教案
- 2024年上海市安全員B證(項目負(fù)責(zé)人)考試試題題庫
- 食品安全、消防安全、交通安全
- 建筑施工企業(yè)新員工三級安全教育培訓(xùn)
- 變頻器實訓(xùn)報告
- 無人機(jī)團(tuán)體培訓(xùn)課件
- 汽車檢測技術(shù)課件 任務(wù)二 檢測汽車動力性能
評論
0/150
提交評論