java編碼規(guī)范華為_第1頁
java編碼規(guī)范華為_第2頁
java編碼規(guī)范華為_第3頁
java編碼規(guī)范華為_第4頁
java編碼規(guī)范華為_第5頁
已閱讀5頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Documentnumber文檔編號Confidentialitylevel密級內(nèi)部公開Documentversion文檔版本TotalNUM頁V1.00Java語言編碼規(guī)范Preparedby擬制Date日期yyyy-mm-ddReviewedby評審人Date日期yyyy-mm-ddApprovedby批準Date日期yyyy-mm-ddRevisionRecord修訂記錄Date日期RevisionVersion修訂版本SecNo.修改章節(jié)ChangeDescription修改描述Author作者yyyy-mm-ddVx.xxTableofContents目錄TOC\h\z\t"標題1,1,標題2,2"1. 范圍 42. 規(guī)范性引用文獻 43. 術(shù)語和定義 44. 排版規(guī)范 54.1. 規(guī)則 54.2. 建議 75. 注釋規(guī)范 85.1. 規(guī)則 85.2. 建議 136. 命名規(guī)范 166.1. 規(guī)則 166.2. 建議 177. 編碼規(guī)范 197.1. 規(guī)則 197.2. 建議 238. JTEST規(guī)范 258.1. 規(guī)則 258.2. 建議 26范圍本規(guī)范規(guī)定了使用Java語言編程時排版、注釋、命名、編碼和JTEST的規(guī)則和建議。本規(guī)范合用于使用Java語言編程的產(chǎn)品和項目。規(guī)范性引用文獻下列文獻中的條款通過本規(guī)范的引用而成為本規(guī)范的條款。凡是注日期的引用文獻,其隨后所有的修改單(不涉及勘誤的內(nèi)容)或修訂版均不合用于本規(guī)范,然而,鼓勵根據(jù)本規(guī)范達成協(xié)議的各方研究是否可使用這些文獻的最新版本。凡是不注日期的引用文獻,其最新版本合用于本規(guī)范。序號編號名稱1公司-DKBA1040-2023.12《Java語言編程規(guī)范》術(shù)語和定義規(guī)則:編程時強制必須遵守的原則。建議:編程時必須加以考慮的原則。格式:對此規(guī)范格式的說明。說明:對此規(guī)范或建議進行必要的解釋。示例:對此規(guī)范或建議從正、反兩個方面給出例子。排版規(guī)范規(guī)則*程序塊要采用縮進風格編寫,縮進的空格數(shù)為4個。說明:對于由開發(fā)工具自動生成的代碼可以有不一致。*分界符(如大括號‘{’和‘}’)應(yīng)各獨占一行并且位于同一列,同時與引用它們的語句左對齊。在函數(shù)體的開始、類和接口的定義、以及if、for、do、while、switch、case語句中的程序都要采用如上的縮進方式。示例:如下例子不符合規(guī)范。for(...){...//programcode}if(...){...//programcode} voidexample_fun(void){...//programcode}應(yīng)如下書寫:for(...){...//programcode}if(...){...//programcode} voidexample_fun(void){...//programcode} *較長的語句、表達式或參數(shù)(>80字符)要提成多行書寫,長表達式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首,劃分出的新行要進行適當?shù)目s進,使排版整齊,語句可讀。示例:if(filename!=null&&newFile(logPath+filename).length()<LogConfig.getFileSize()){...//programcode} publicstaticLogIteratorread(StringlogType,DatestartTime,DateendTime,intlogLevel,StringuserName,intbufferNum) *不允許把多個短語句寫在一行中,即一行只寫一條語句示例:如下例子不符合規(guī)范。LogFilenamenow=null;LogFilenamethat=null;應(yīng)如下書寫:LogFilenamenow=null;LogFilenamethat=null; *if,for,do,while,case,switch,default等語句自占一行,且if,for,do,while等語句的執(zhí)行語句無論多少都要加括號{}。示例:如下例子不符合規(guī)范。if(writeToFile)writeFileTerrupt(); 應(yīng)如下書寫:if(writeToFile){writeFileTerrupt();} *相對獨立的程序塊之間、變量說明之后必須加空行。示例:如下例子不符合規(guī)范。if(log.getLevel()<LogConfig.getRecordLevel()){return;}LogWriterwriter; 應(yīng)如下書寫:if(log.getLevel()<LogConfig.getRecordLevel()){return;}LogWriterwriter;intindex; *對齊只使用空格鍵,不使用TAB鍵。說明:以免用不同的編輯器閱讀程序時,因TAB鍵所設(shè)立的空格數(shù)目不同而導致程序布局不整齊。JBuilder、UltraEdit等編輯環(huán)境,支持行首TAB替換成空格,應(yīng)將該選項打開。*在兩個以上的關(guān)鍵字、變量、常量進行對等操作時,它們之間的操作符之前、之后或者前后要加空格;進行非對等操作時,假如是關(guān)系密切的立即操作符(如.),后不應(yīng)加空格。說明:采用這種松散方式編寫代碼的目的是使代碼更加清楚。由于留空格所產(chǎn)生的清楚性是相對的,所以,在已經(jīng)非常清楚的語句中沒有必要再留空格,假如語句已足夠清楚則括號內(nèi)側(cè)(即左括號后面和右括號前面)不需要加空格,多重括號間不必加空格,由于在Java語言中括號已經(jīng)是最清楚的標志了。在長語句中,假如需要加的空格非常多,那么應(yīng)當保持整體清楚,而在局部不加空格。給操作符留空格時不要連續(xù)留兩個以上空格。示例:逗號、分號只在后面加空格。inta,b,c;比較操作符,賦值操作符"="、"+=",算術(shù)操作符"+"、"%",邏輯操作符"&&"、"&",位域操作符"<<"、"^"等雙目操作符的前后加空格。if(current_time>=MAX_TIME_VALUE)a=b+c;a*=2;a=b^2; "!"、"~"、"++"、"--"、"&"(地址運算符)等單目操作符前后不加空格。flag=!isEmpty;//非操作"!"與內(nèi)容之間i++;//"++","--"與內(nèi)容之間 "."前后不加空格。p.id=pid;//"."前后不加空格 if、for、while、switch等與后面的括號間應(yīng)加空格,使if等關(guān)鍵字更為突出、明顯。if(a>=b&&c>d)建議類屬性和類方法不要交叉放置,不同存取范圍的屬性或者方法也盡量不要交叉放置。格式:類定義{類的公有屬性定義類的保護屬性定義類的私有屬性定義類的公有方法定義類的保護方法定義類的私有方法定義}注釋規(guī)范規(guī)則一般情況下,源程序有效注釋量必須在30%以上。說明:注釋的原則是有助于對程序的閱讀理解,在該加的地方都加了,注釋不宜太多也不能太少,注釋語言必須準確、易懂、簡潔??梢杂米⑨層涗浌ぞ邅碛涗洝0淖⑨專喊淖⑨寣懭胍幻麨閜ackage.html的HTML格式說明文獻放入當前程徑。說明:方便JavaDoc收集示例:com/huawei/msg/relay/comm/package.html包的注釋內(nèi)容:簡述本包的作用、具體描述本包的內(nèi)容、產(chǎn)品模塊名稱和版本、公司版權(quán)。說明:在具體描述中應(yīng)當說明這個包的作用以及在整個項目中的位置。格式:<html><body><p>一句話簡述。<p>具體描述。<p>產(chǎn)品模塊名稱和版本<br>公司版權(quán)信息</body></html> 示例:<html><body><P>為Relay提供通信類,上層業(yè)務(wù)使用本包的通信類與SP進行通信。<p>具體描述。。。。。。。。<p>MMSCV100R002Relay<br>(C)版權(quán)所有2023-2023文思創(chuàng)新技術(shù)有限公司</body></html> 文獻注釋:文獻注釋寫入文獻頭部,包名之前的位置。說明:注意以/*開始避免被JavaDoc收集示例:/**注釋內(nèi)容*/packagem; 文獻注釋內(nèi)容:版權(quán)說明、描述信息、生成日期、修改歷史。說明:文獻名可選。格式:/**文獻名:[文獻名]*版權(quán):〈版權(quán)〉*描述:〈描述〉*修改人:〈修改人〉*修改時間:YYYY-MM-DD*修改單號:〈修改單號〉*修改內(nèi)容:〈修改內(nèi)容〉*/ 說明:每次修改后在文獻頭部寫明修改信息,CheckIn的時候可以直接把藍色字體信息粘貼到VSS的注釋上。在代碼受控之前可以免去。示例:/**文獻名:LogManager.java*版權(quán):Copyright2023-2023HuaweiTech.Co.Ltd.AllRightsReserved.*描述:MMSCV100R002Relay通用日記系統(tǒng)*修改人:張三*修改時間:2023-02-16*修改內(nèi)容:新增*修改人:李四*修改時間:2023-02-26*修改單號:WSS368*修改內(nèi)容:。。。。。。*修改人:王五*修改時間:2023-03-25*修改單號:WSS498*修改內(nèi)容:。。。。。。*/ 類和接口的注釋:該注釋放在package關(guān)鍵字之后,class或者interface關(guān)鍵字之前。說明:方便JavaDoc收集。示例:packagem;/***注釋內(nèi)容*/publicclassCommManager 類和接口的注釋內(nèi)容:類的注釋重要是一句話功能簡述、功能具體描述。說明:可根據(jù)需要列出:版本號、生成日期、作者、內(nèi)容、功能、與其它類的關(guān)系等。假如一個類存在Bug,請如實說明這些Bug。格式:/***〈一句話功能簡述〉*〈功能具體描述〉*@author[作者]*@version[版本號,YYYY-MM-DD]*@see[相關(guān)類/方法]*@since[產(chǎn)品/模塊版本]*@deprecated*/說明:描述部分說明該類或者接口的功能、作用、使用方法和注意事項,每次修改后增長作者和更新版本號和日期,@since表達從那個版本開始就有這個類或者接口,@deprecated表達不建議使用該類或者接口。示例:/***LogManager類集中控制對日記讀寫的操作。*所有為靜態(tài)變量和靜態(tài)方法,對外提供統(tǒng)一接口。分派相應(yīng)日記類型的讀寫器,*讀取或?qū)懭敕蠗l件的日記紀錄。*@author張三,李四,王五*@version1.2,2023-03-25*@seeLogIteraotor*@seeBasicLog*@sinceCommonLog1.0*/ 類屬性、公有和保護方法注釋:寫在類屬性、公有和保護方法上面。示例:/***注釋內(nèi)容*/privateStringlogType;/***注釋內(nèi)容*/publicvoidwrite() 成員變量注釋內(nèi)容:成員變量的意義、目的、功能,也許被用到的地方。 公有和保護方法注釋內(nèi)容:列出方法的一句話功能簡述、功能具體描述、輸入?yún)?shù)、輸出參數(shù)、返回值、違例等。格式:/***〈一句話功能簡述〉*〈功能具體描述〉*@param[參數(shù)1][參數(shù)1說明]*@param[參數(shù)2][參數(shù)2說明]*@return[返回類型說明]*@exception/throws[違例類型][違例說明]*@see[類、類#方法、類#成員]*@deprecated*/說明:@since表達從那個版本開始就有這個方法;@exception或throws列出也許仍出的異常;@deprecated表達不建議使用該方法。示例:/***根據(jù)日記類型和時間讀取日記。*分派相應(yīng)日記類型的LogReader,指定類型、查詢時間段、條件和反復器緩沖數(shù),*讀取日記記錄。查詢條件為null或0表達無限制,反復器緩沖數(shù)為0讀不到日記。*查詢時間為左包含原則,即[startTime,endTime)。*@paramlogTypeName日記類型名(在配置文獻中定義的)*@paramstartTime查詢?nèi)沼浀拈_始時間*@paramendTime查詢?nèi)沼浀慕Y(jié)束時間*@paramlogLevel查詢?nèi)沼浀募墑e*@paramuserName查詢該用戶的日記*@parambufferNum日記反復器緩沖記錄數(shù)*@return結(jié)果集,日記反復器*@sinceCommonLog1.0*/publicstaticLogIteratorread(StringlogType,DatestartTime,DateendTime,intlogLevel,StringuserName,intbufferNum) 對于方法內(nèi)部用throw語句拋出的異常,必須在方法的注釋中標明,對于所調(diào)用的其他方法所拋出的異常,選擇重要的在注釋中說明。對于非RuntimeException,即throws子句聲明會拋出的異常,必須在方法的注釋中標明。說明:異常注釋用@exception或@throws表達,在JavaDoc中兩者等價,但推薦用@exception標注Runtime異常,@throws標注非Runtime異常。異常的注釋必須說明該異常的含義及什么條件下拋出該異常。 *注釋應(yīng)與其描述的代碼相近,對代碼的注釋應(yīng)放在其上方或右方(對單條語句的注釋)相鄰位置,不可放在下面,如放于上方則需與其上面的代碼用空行隔開。*注釋與所描述內(nèi)容進行同樣的縮排。說明:可使程序排版整齊,并方便注釋的閱讀與理解。示例:如下例子,排版不整齊,閱讀稍感不方便。publicvoidexample(){//注釋CodeBlockOne //注釋CodeBlockTwo}應(yīng)改為如下布局。publicvoidexample(){//注釋CodeBlockOne //注釋CodeBlockTwo} *將注釋與其上面的代碼用空行隔開。示例:如下例子,顯得代碼過于緊湊。//注釋programcodeone//注釋programcodetwo 應(yīng)如下書寫://注釋programcodeone //注釋programcodetwo *對變量的定義和分支語句(條件分支、循環(huán)語句等)必須編寫注釋。說明:這些語句往往是程序?qū)崿F(xiàn)某一特定功能的關(guān)鍵,對于維護人員來說,良好的注釋幫助更好的理解程序,有時甚至優(yōu)于看設(shè)計文檔。 *對于switch語句下的case語句,假如由于特殊情況需要解決完一個case后進入下一個case解決,必須在該case語句解決完、下一個case語句前加上明確的注釋。說明:這樣比較清楚程序編寫者的意圖,有效防止無端漏掉break語句。 *邊寫代碼邊注釋,修改代碼同時修改相應(yīng)的注釋,以保證注釋與代碼的一致性。不再有用的注釋要刪除。 *注釋的內(nèi)容要清楚、明了,含義準確,防止注釋二義性。說明:錯誤的注釋不僅無益反而有害。 *避免在注釋中使用縮寫,特別是不常用縮寫。說明:在使用縮寫時或之前,應(yīng)對縮寫進行必要的說明。 建議*避免在一行代碼或表達式的中間插入注釋。說明:除非必要,不應(yīng)在代碼或表達中間插入注釋,否則容易使代碼可理解性變差。 *通過對函數(shù)或過程、變量、結(jié)構(gòu)等對的的命名以及合理地組織代碼的結(jié)構(gòu),使代碼成為自注釋的。說明:清楚準確的函數(shù)、變量等的命名,可增長代碼可讀性,并減少不必要的注釋。 *在代碼的功能、意圖層次上進行注釋,提供有用、額外的信息。說明:注釋的目的是解釋代碼的目的、功能和采用的方法,提供代碼以外的信息,幫助讀者理解代碼,防止沒必要的反復注釋信息。示例:如下注釋意義不大。//假如receiveFlag為真if(receiveFlag) 而如下的注釋則給出了額外有用的信息。//假如從連結(jié)收到消息if(receiveFlag) *在程序塊的結(jié)束行右方加注釋標記,以表白某程序塊的結(jié)束。說明:當代碼段較長,特別是多重嵌套時,這樣做可以使代碼更清楚,更便于閱讀。示例:參見如下例子。if(...){programcode1 while(index<MAX_INDEX){programcode2}//endofwhile(index<MAX_INDEX)//指明該條while語句結(jié)束}//endofif(...)//指明是哪條if語句結(jié)束 *注釋應(yīng)考慮程序易讀及外觀排版的因素,使用的語言若是中、英兼有的,建議多使用中文,除非能用非常流利準確的英文表達。說明:注釋語言不統(tǒng)一,影響程序易讀性和外觀排版,出于維護的考慮,建議使用中文。 方法內(nèi)的單行注釋使用//。說明:調(diào)試程序的時候可以方便的使用/*。。。*/注釋掉一長段程序。注釋盡量使用中文注釋和中文標點。方法和類描述的第一句話盡量使用簡潔明了的話概括一下功能,然后加以句號。接下來的部分可以具體描述。說明:JavaDoc工具收集簡介的時候使用選取第一句話。 順序?qū)崿F(xiàn)流程的說明使用1、2、3、4在每個實現(xiàn)環(huán)節(jié)部分的代碼前面進行注釋。示例:如下是對設(shè)立屬性的流程注釋 //1、判斷輸入?yún)?shù)是否有效。 。。。。。 //2、設(shè)立本地變量。 。。。。。。 一些復雜的代碼需要說明。示例:這里重要是對閏年算法的說明。 //1.假如能被4整除,是閏年; //2.假如能被100整除,不是閏年.; //3.假如能被400整除,是閏年.。命名規(guī)范規(guī)則包名采用域后綴倒置的加上自定義的包名,采用小寫字母。在部門內(nèi)部應(yīng)當規(guī)劃好包名的范圍,防止產(chǎn)生沖突。部門內(nèi)部產(chǎn)品使用部門的名稱加上模塊名稱。產(chǎn)品線的產(chǎn)品使用產(chǎn)品的名稱加上模塊的名稱。格式:com.huawei.產(chǎn)品名.模塊名稱com.huawei.部門名稱.項目名稱示例:Relay模塊包名com.huawei.msg.relay通用日記模塊包名com.huawei.msg.log 類名和接口使用類意義完整的英文描述,每個英文單詞的首字母使用大寫、其余字母使用小寫的大小寫混合法。示例:OrderInformation,CustomerList,LogManager,LogConfig 方法名使用類意義完整的英文描述:第一個單詞的字母使用小寫、剩余單詞首字母大寫其余字母小寫的大小寫混合法。示例:privatevoidcalculateRate();publicvoidaddNewOrder(); 方法中,存取屬性的方法采用setter和getter方法,動作方法采用動詞和動賓結(jié)構(gòu)。格式:get+非布爾屬性名()is+布爾屬性名()set+屬性名()動詞()動詞+賓語()示例:publicStringgetType();publicbooleanisFinished();publicvoidsetVisible(boolean);publicvoidshow();publicvoidaddKeyListener(Listener); 屬性名使用意義完整的英文描述:第一個單詞的字母使用小寫、剩余單詞首字母大寫其余字母小寫的大小寫混合法。屬性名不能與方法名相同。示例:privatecustomerName;privateorderNumber;privatesmpSession; 常量名使用全大寫的英文描述,英文單詞之間用下劃線分隔開,并且使用finalstatic修飾。示例:publicfinalstaticintMAX_VALUE=1000;publicfinalstaticStringDEFAULT_START_DATE="2023-12-08"; 屬性名可以和公有方法參數(shù)相同,不能和局部變量相同,引用非靜態(tài)成員變量時使用this引用,引用靜態(tài)成員變量時使用類名引用。示例:publicclassPerson{privateStringname;privatestaticListproperties; publicvoidsetName(Stringname){=name;} publicvoidsetProperties(Listproperties){Pperties=properties;}}建議常用組件類的命名以組件名加上組件類型名結(jié)尾。示例:Application類型的,命名以App結(jié)尾——MainAppFrame類型的,命名以Frame結(jié)尾——TopoFramePanel類型的,建議命名以Panel結(jié)尾——CreateCircuitPanelBean類型的,建議命名以Bean結(jié)尾——DataAccessBeanEJB類型的,建議命名以EJB結(jié)尾——DBProxyEJBApplet類型的,建議命名以Applet結(jié)尾——PictureShowApplet 假如函數(shù)名超過15個字母,可采用以去掉元音字母的方法或者以行業(yè)內(nèi)約定俗成的縮寫方式縮寫函數(shù)名。示例:getCustomerInformation()改為getCustomerInfo() 準確地擬定成員函數(shù)的存取控制符號,不是必須使用public屬性的,請使用protected,不是必須使用protected,請使用private。示例:protectedvoidsetUserName(),privatevoidcalculateRate() 具有集合意義的屬性命名,盡量包含其復數(shù)的意義。示例:customers,orderItems編碼規(guī)范規(guī)則*明確方法功能,精確(而不是近似)地實現(xiàn)方法設(shè)計。一個函數(shù)僅完畢一件功能,即使簡樸功能也應(yīng)當編寫方法實現(xiàn)。說明:雖然為僅用一兩行就可完畢的功能去編方法好象沒有必要,但用方法可使功能明確化,增長程序可讀性,亦可方便維護、測試。 應(yīng)明確規(guī)定對接口方法參數(shù)的合法性檢查應(yīng)由方法的調(diào)用者負責還是由接口方法自身負責,缺省是由方法調(diào)用者負責。說明:對于模塊間接口方法的參數(shù)的合法性檢查這一問題,往往有兩個極端現(xiàn)象,即:要么是調(diào)用者和被調(diào)用者對參數(shù)均不作合法性檢查,結(jié)果就漏掉了合法性檢查這一必要的解決過程,導致問題隱患;要么就是調(diào)用者和被調(diào)用者均對參數(shù)進行合法性檢查,這種情況雖不會導致問題,但產(chǎn)生了冗余代碼,減少了效率。 明確類的功能,精確(而非近似)地實現(xiàn)類的設(shè)計。一個類僅實現(xiàn)一組相近的功能。說明:劃分類的時候,應(yīng)當盡量把邏輯解決、數(shù)據(jù)和顯示分離,實現(xiàn)類功能的單一性。示例:數(shù)據(jù)類不能包含數(shù)據(jù)解決的邏輯。通信類不能包含顯示解決的邏輯。 所有的數(shù)據(jù)類必須重載toString()方法,返回該類故意義的內(nèi)容。說明:父類假如實現(xiàn)了比較合理的toString(),子類可以繼承不必再重寫。示例:publicTopoNode{privateStringnodeName;publicStringtoString(){return"NodeName:"+nodeName;}} 數(shù)據(jù)庫操作、IO操作等需要使用結(jié)束close()的對象必須在try-catch-finally的finally中close()。示例:try{//......}catch(IOExceptionioe){//......}finally{try{out.close();}catch(IOExceptionioe){//......}} 異常捕獲后,假如不對該異常進行解決,則應(yīng)當紀錄日記或者ex.printStackTrace()。說明:若有特殊因素必須用注釋加以說明。示例:try{//...}catch(IOExceptionioe){ioe.printStackTrace();} 自己拋出的異常必須要填寫具體的描述信息。說明:便于問題定位。示例:thrownewIOException("Writingdataerror!Data:"+data.toString()); 運營期異常使用RuntimeException的子類來表達,不用在也許拋出異常的方法聲明上加throws子句。非運營期異常是從Exception繼承而來,必須在方法聲明上加throws子句。說明:非運營期異常是由外界運營環(huán)境決定異常拋出條件的異常,例如文獻操作,也許受權(quán)限、磁盤空間大小的影響而失敗,這種異常是程序自身無法避免的,需要調(diào)用者明確考慮該異常出現(xiàn)時該如何解決方法,因此非運營期異常必須有throws子句標出,不標出或者調(diào)用者不捕獲該類型異常都會導致編譯失敗,從而防止程序員自身疏忽。運營期異常是程序在運營過程中自身考慮不周導致的異常,例如傳入錯誤的參數(shù)等。拋出運營期異常的目的是防止異常擴散,導致定位困難。因此在做異常體系設(shè)計時要根據(jù)錯誤的性質(zhì)合理選擇自定義異常的繼承關(guān)系。尚有一種異常是Error繼承而來的,這種異常由虛擬機自己維護,表達發(fā)生了致命錯誤,程序無法繼續(xù)運營例如內(nèi)存局限性。我們自己的程序不應(yīng)當捕獲這種異常,并且也不應(yīng)當創(chuàng)建該種類型的異常。 在程序中使用異常解決還是使用錯誤返回碼解決,根據(jù)是否有助于程序結(jié)構(gòu)來擬定,并且異常和錯誤碼不應(yīng)當混合使用,推薦使用異常。說明:一個系統(tǒng)或者模塊應(yīng)當統(tǒng)一規(guī)劃異常類型和返回碼的含義。但是不能用異常來做一般流程解決的方式,不要過多地使用異常,異常的解決效率比條件分支低,并且異常的跳轉(zhuǎn)流程難以預(yù)測。 *注意運算符的優(yōu)先級,并用括號明確表達式的操作順序,避免使用默認優(yōu)先級。說明:防止閱讀程序時產(chǎn)生誤解,防止因默認的優(yōu)先級與設(shè)計思想不符而導致程序犯錯。示例:下列語句中的表達式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)導致了判斷條件犯錯。 *避免使用不易理解的數(shù)字,用故意義的標記來替代。涉及物理狀態(tài)或者具有物理意義的常量,不應(yīng)直接使用數(shù)字,必須用故意義的靜態(tài)變量來代替。示例:如下的程序可讀性差。if(state==0){state=1;...//programcode} 應(yīng)改為如下形式:privatefinalstaticintTRUNK_IDLE=0;privatefinalstaticintTRUNK_BUSY=1;privatefinalstaticintTRUNK_UNKNOWN=-1; if(state==TRUNK_IDLE){state=TRUNK_BUSY;...//programcode} 數(shù)組聲明的時候使用int[]index,而不要使用intindex[]。說明:使用intindex[]格式使程序的可讀性較差示例:如下程序可讀性差:publicintgetIndex()[]{}如下程序可讀性好:publicint[]getIndex(){}調(diào)試代碼的時候,不要使用System.out和System.err進行打印,應(yīng)當使用一個包含統(tǒng)一開關(guān)的測試類進行統(tǒng)一打印。說明:代碼發(fā)布的時候可以統(tǒng)一關(guān)閉調(diào)試代碼,定位問題的時候又可以打開開關(guān)。用調(diào)測開關(guān)來切換軟件的DEBUG版和正式版,而不要同時存在正式版本和DEBUG版本的不同源文獻,以減少維護的難度。建議記錄異常不要保存exception.getMessage(),而要記錄exception.toString()。示例:NullPointException拋出時經(jīng)常描述為空,這樣往往看不出是出了什么錯。 一個方法不應(yīng)拋出太多類型的異常。說明:假如程序中需要分類解決,則將異常根據(jù)分類組織成繼承關(guān)系。假如的確有很多異常類型一方面考慮用異常描述來區(qū)別,throws/exception子句標明的異常最佳不要超過三個。 異常捕獲盡量不要直接catch(Exceptionex),應(yīng)當把異常細分解決。 *假如多段代碼反復做同一件事情,那么在方法的劃分上也許存在問題。說明:若此段代碼各語句之間有實質(zhì)性關(guān)聯(lián)并且是完畢同一件功能的,那么可考慮把此段代碼構(gòu)導致一個新的方法。 對于創(chuàng)建的重要的類,最佳置入main()函數(shù),包含用于測試那個類的代碼。說明:重要類涉及:1、能完畢獨立功能的類,如通訊。2、具有完整界面的類,如一個對話框、一個窗口、一個幀等。3、JavaBean類。示例:publicstaticvoidmain(String[]arguments){CreateCircuitDialogcircuitDialog1=newCreateCircuitDialog(null,"Ciruit",false);circuitDialog1.setVisible(true);} 集合中的數(shù)據(jù)假如不使用了應(yīng)當及時釋放,特別是可反復使用的集合。說明:由于集合保存了對象的句柄,虛擬機的垃圾收集器就不會回收。 *源程序中關(guān)系較為緊密的代碼應(yīng)盡也許相鄰。說明:便于程序閱讀和查找。示例:矩形的長與寬關(guān)系較密切,放在一起。rect.length=10;rect.width=5; *不要使用難懂的技巧性很高的語句,除非很有必要時。說明:高技巧語句不等于高效率的程序,事實上程序的效率關(guān)鍵在于算法。JTEST規(guī)范規(guī)則在switch中每個case語句都應(yīng)當包含break或者return。不要使用空的for、if、while語句。在運算中不要減小數(shù)據(jù)的精度。switch語句中的case關(guān)鍵字要和后面的常量保持一個空格,switch語句中不要定義case之外的無用標簽。不要在if語句中使用等號=進行賦值操作。靜態(tài)成員或者方法使用類名訪問,不使用句柄訪問。方法重載的時候,一定要注意方法名相同,避免類中使用兩個非常相似的方法名。不要在ComponentLponentResized()方法中調(diào)用serResize()方法。不要覆蓋父類的靜態(tài)方法和私有方法。不要覆蓋父類的屬性。不要使用兩級以上的內(nèi)部類。把內(nèi)部類定義成私有類。去掉接口中多余的定義(不使用public,abstract,static,final等,這是接口中默認的)。不要定義不會被用到的局部變量、類私有屬性、類私有方法和方法參數(shù)。顯式初始化所有的靜態(tài)屬性。不要使用System.getenv()方法。不要硬編碼‘\n’和‘\r’作為換行符號。不要直接使用java.awt.peer.*里面的接口。使用System.arraycopy(),不使用循環(huán)來復制數(shù)組。避免不必要的instanceof比較運算和類造型運算。不要在finalize()方法中刪除監(jiān)聽器(Listeners)。在finalize()方法中一定要調(diào)用super.finalize()方法。在finalize()方法中的finally中調(diào)用super.finalize()方法。進行字符轉(zhuǎn)換的時候應(yīng)當盡也許的較少臨時變量。使用ObjectStream的方法后,調(diào)用reset(),釋放對象。線程同步中,在循環(huán)里面使用條件測試(使用while(isWait)wait()代替if(isWait)wait())。不掉用Thread類的resume(),suspend(),stop()方法。減小單個方法的復雜度,使用的if,while,for,switch語句要在10個以內(nèi)。在Servlets中,重用JDBC連接的數(shù)據(jù)源。減少在Sevlets中使用的同步方法。不定義在包中沒有被用到的和諧屬性、方法和類。沒有子類的和諧類應(yīng)當定義成final。沒有被覆蓋的和諧方法應(yīng)當定義成final。建議為switch語句提供一個default選項。不要在for循環(huán)體中對計數(shù)器的賦值。不要給非公有類定義public構(gòu)建器。不要對浮點數(shù)進行比較運算,特別是不要進行==,!=運算,減少>,<運算。實現(xiàn)equals()方法時,先用getClass()或instanceof進行類型比較,通過后才干繼續(xù)比較。不要重載main()方法用作除入口以外的其他用途。方法的參數(shù)名不要和類中的方法名相同。除了構(gòu)建器外,不要使用和類名相同的方法名。不要定義Error和RuntimeException的子類,可以定義Exception的子類。線程中需要實現(xiàn)run()方法。使用equals()比較兩個類的值是否相同。字符串和數(shù)字運算結(jié)果相連接的時候,應(yīng)當把數(shù)字運算部分用小括號括起來。類中不要使用非私有(公有、保護和和諧)的非靜態(tài)屬性。在類中對于沒有實現(xiàn)的接口,應(yīng)當定義成抽象方法,類應(yīng)當定義成抽象類。(5級)不要顯式導入java.lang.*包;初始化時不要使用類的非靜態(tài)屬性。顯式初始化所有的局部變量。按照方法名把方法排序放置,同名協(xié)議類型的方法應(yīng)當放在一起。不要使用嵌套賦值,即在一個表達式中使用多個=。不要在抽象類的構(gòu)建器中調(diào)用抽象方法。重載equals()方法的同時,也應(yīng)當重載hashCode()方法。工具類(Utility)不要定義構(gòu)建器,涉及私有構(gòu)建器。不要在switch中使用10個以上的case語句。把main()方法放在類的最后。聲明方法違例的時候不要使用Exception,應(yīng)當使用它的子類。不要直接扔出一個Error,應(yīng)當扔出它的子類。在進行比較的時候,總是把常量放在同一邊(都放在左邊或者都放在右邊)。在也許的情況下,總是為類定義一個缺省的構(gòu)建器。在捕獲違例的時候,不使用Exception,RuntimeException,Throwable,盡也許使用它們的子類。在接口或者工具類中中定義常量。(5級)使用大寫‘L’表達long常量。(5級)main()方法必須是publicstaticvoidmain(String[])。(5級)對返回類型為boolean的方法使用is開頭,其它類型的不能使用。對非boolean類型取值方法(getter)使用get開頭,其它類型的不能使用。對于設(shè)立值的方法(set

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論