JAVA編程規(guī)范修訂版_第1頁
JAVA編程規(guī)范修訂版_第2頁
JAVA編程規(guī)范修訂版_第3頁
JAVA編程規(guī)范修訂版_第4頁
JAVA編程規(guī)范修訂版_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

[鍵入文字] PagePAGE18,TotalSECTIONPAGES18 Java編程規(guī)范排版規(guī)則程序塊要采用縮進(jìn)風(fēng)格編寫,縮進(jìn)的空格數(shù)為4個(gè),不允許使用TAB縮進(jìn)。(1.42+)說明:縮進(jìn)使程序更易閱讀,使用空格縮進(jìn)可以適應(yīng)不同操作系統(tǒng)與不同開發(fā)工具。分界符(如大括號(hào)‘{’和‘}’)應(yīng)各獨(dú)占一行,同時(shí)與引用它們的語句左對(duì)齊。在函數(shù)體的開始、類和接口的定義、以及if、for、do、while、switch、case語句中的程序或者static、,synchronized等語句塊中都要采用如上的縮進(jìn)方式。(1.42+) 示例: if(a>b) { doStart(); }較長(zhǎng)的語句、表達(dá)式或參數(shù)(>80字符)要分成多行書寫,長(zhǎng)表達(dá)式要在低優(yōu)先級(jí)操作符處劃分新行,操作符放在新行之首,劃分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊,語句可讀。(1.42+)示例:if(logger.isDebugEnabled()){logger.debug("Sessiondestroyed,call-id"+event.getSession().getCallId());}不允許把多個(gè)短語句寫在一行中,即一行只寫一條語句(1.42+) 說明:閱讀代碼更加清晰 示例:如下例子不符合規(guī)范。 Objecto=newObject();Objectb=null;if,for,do,while,case,switch,default等語句自占一行,且if,for,do,while,switch等語句的執(zhí)行語句無論多少都要加括號(hào){},case的執(zhí)行語句中如果定義變量必須加括號(hào){}。(1.42+) 說明:閱讀代碼更加清晰,減少錯(cuò)誤產(chǎn)生 示例: if(a>b){ doStart();} casex:{ inti=9;} 相對(duì)獨(dú)立的程序塊之間、變量說明之后必須加空行。(1.42+)說明:閱讀代碼更加清晰示例:if(a>b){ doStart();}//此處是空行return;在兩個(gè)以上的關(guān)鍵字、變量、常量進(jìn)行對(duì)等操作時(shí),它們之間的操作符之前、之后或者前后要加空格;進(jìn)行非對(duì)等操作時(shí),如果是關(guān)系密切的立即操作符(如.),后不應(yīng)加空格。(1.42+)說明:閱讀代碼更加清晰示例:if(a==b){ objectA.doStart();}a*=2;建議類屬性和類方法不要交叉放置,不同存取范圍的屬性或者方法也盡量不要交叉放置。(1.42+)格式:類定義{類的公有屬性定義類的保護(hù)屬性定義類的私有屬性定義類的公有方法定義類的保護(hù)方法定義類的私有方法定義}修飾詞按照指定順序書寫:[訪問權(quán)限][static][final]。(1.42+) 示例: publicstaticfinalStringstr=“abc”;注釋規(guī)則源程序注釋量必須在30%以上。(1.42+)說明:由于每個(gè)文件的代碼注釋不一定都可以達(dá)到30%,建議以一個(gè)系統(tǒng)內(nèi)部模塊作為單位進(jìn)行檢查 包的注釋:寫入一個(gè)名為package.html的HTML格式的說明文件放入包所在路徑。包的注釋內(nèi)容:簡(jiǎn)述本包的作用、詳細(xì)描述本包的內(nèi)容、產(chǎn)品模塊名稱和版本、公司版權(quán)。(1.42+)說明:方便JavaDoc收集,方便對(duì)包的了解示例:com/XXXX/iin/websmap/comm/package.html<html><body><p>一句話簡(jiǎn)述。<p>詳細(xì)描述。<p>產(chǎn)品模塊名稱和版本<br>公司版權(quán)信息</body></html>示例:<html><body><P>為WEBSMAP提供通信類,上層業(yè)務(wù)使用本包的通信類與SMP-B進(jìn)行通信。<p>詳細(xì)描述。。。。。。。。<p>IINV100R001WEBSMAP<br>(C)版權(quán)所有2000-2001XX技術(shù)有限公司</body></html>類和接口的注釋放在class或者interface關(guān)鍵字之前,import關(guān)鍵字之后。注釋主要是一句話功能簡(jiǎn)述與功能詳細(xì)描述。類注釋使用“/***/”注釋方式(1.42+)說明:方便JavaDoc收集,沒有import可放在package之后。注釋可根據(jù)需要列出:作者、內(nèi)容、功能、與其它類的關(guān)系等。功能詳細(xì)描述部分說明該類或者接口的功能、作用、使用方法和注意事項(xiàng),每次修改后增加作者和更新版本號(hào)和日期,@since表示從那個(gè)版本開始就有這個(gè)類或者接口,@deprecated表示不建議使用該類或者接口。/***〈一句話功能簡(jiǎn)述〉*〈功能詳細(xì)描述〉*@author[作者](必須)*@see[相關(guān)類/方法](可選)*@since[產(chǎn)品/模塊版本](必須)*@deprecated(可選)*/示例:packagecom.XXXX.m;importjava.util.*;/***LogManager類集中控制對(duì)日志讀寫的操作。*全部為靜態(tài)變量和靜態(tài)方法,對(duì)外提供統(tǒng)一接口。分配對(duì)應(yīng)日志類型的讀寫器,*讀取或?qū)懭敕蠗l件的日志紀(jì)錄。*@author張三,李四,王五*@seeLogIteraotor*@seeBasicLog*@sinceCommonLog1.0*/publicclassLogManager類屬性(成員變量)、公有和保護(hù)方法注釋:寫在類屬性、公有和保護(hù)方法上面,注釋方式為“/***/”.(1.42+)示例:/***注釋內(nèi)容*/privateStringlogType;/***注釋內(nèi)容*/publicvoidwrite()公有和保護(hù)方法注釋內(nèi)容:列出方法的一句話功能簡(jiǎn)述、功能詳細(xì)描述、輸入?yún)?shù)、輸出參數(shù)、返回值、異常等。(1.42+)格式:/***〈一句話功能簡(jiǎn)述〉*〈功能詳細(xì)描述〉*@param[參數(shù)1][參數(shù)1說明]*@param[參數(shù)2][參數(shù)2說明]*@return[返回類型說明]*@exception/throws[異常類型][異常說明]*@see[類、類#方法、類#成員]*@since[起始版本]*@deprecated*/說明:@since表示從那個(gè)版本開始就有這個(gè)方法,如果是最初版本就存在的方法無需說明;@exception或throws列出可能仍出的異常;@deprecated表示不建議使用該方法。示例:/***根據(jù)日志類型和時(shí)間讀取日志。*分配對(duì)應(yīng)日志類型的LogReader,指定類型、查詢時(shí)間段、條件和反復(fù)器緩沖數(shù),*讀取日志記錄。查詢條件為null或0的表示沒有限制,反復(fù)器緩沖數(shù)為0讀不到日志。*查詢時(shí)間為左包含原則,即[startTime,endTime)。*@paramlogTypeName日志類型名(在配置文件中定義的)*@paramstartTime查詢?nèi)罩镜拈_始時(shí)間*@paramendTime查詢?nèi)罩镜慕Y(jié)束時(shí)間*@paramlogLevel查詢?nèi)罩镜募?jí)別*@paramuserName查詢?cè)撚脩舻娜罩?@parambufferNum日志反復(fù)器緩沖記錄數(shù)*@return結(jié)果集,日志反復(fù)器*@since1.2*/publicstaticLogIteratorread(StringlogType,DatestartTime, DateendTime,intlogLevel,StringuserName,intbufferNum)對(duì)于方法內(nèi)部用throw語句拋出的異常,必須在方法的注釋中標(biāo)明,對(duì)于所調(diào)用的其他方法所拋出的異常,選擇主要的在注釋中說明。對(duì)于非RuntimeException,即throws子句聲明會(huì)拋出的異常,必須在方法的注釋中標(biāo)明。(1.42+)說明:異常注釋用@exception或@throws表示,在JavaDoc中兩者等價(jià),但推薦用@exception標(biāo)注Runtime異常,@throws標(biāo)注非Runtime異常。異常的注釋必須說明該異常的含義及什么條件下拋出該異常。注釋應(yīng)與其描述的代碼相近,對(duì)代碼的注釋應(yīng)放在其上方,并與其上面的代碼用空行隔開,注釋與所描述內(nèi)容進(jìn)行同樣的縮排。(1.42+)說明:可使程序排版整齊,并方便注釋的閱讀與理解。示例:/**注釋*/publicvoidexample2(){//注釋CodeBlockOne//注釋CodeBlockTwo}/**注釋*/publicvoidexample(){//注釋CodeBlockOne//注釋CodeBlockTwo}對(duì)于switch語句下的case語句,必須在每個(gè)case分支結(jié)束前加上break語句。(1.42+)說明:break才能真正表示該switch執(zhí)行結(jié)束,不然可能會(huì)進(jìn)入該case以后的分支。至于語法上合法的場(chǎng)景“一個(gè)case后進(jìn)入下一個(gè)case處理”,應(yīng)該在編碼設(shè)計(jì)上就避免。修改代碼同時(shí)修改相應(yīng)的注釋,以保證注釋與代碼的一致性。不再有用的注釋要?jiǎng)h除。(1.42+)注釋的內(nèi)容要清楚、明了,含義準(zhǔn)確,防止注釋二義性。(1.42+)說明:錯(cuò)誤的注釋不但無益反而有害。避免在注釋中使用縮寫,特別是不常用縮寫。(1.42+)說明:在使用縮寫時(shí)或之前,應(yīng)對(duì)縮寫進(jìn)行必要的說明。對(duì)重載父類的方法必須進(jìn)行@Override聲明(5.0+)說明:可清楚說明此方法是重載父類的方法,保證重載父類的方法時(shí)不會(huì)因?yàn)閱卧~寫錯(cuò)而造成錯(cuò)誤(寫錯(cuò)方法名或者參數(shù)個(gè)數(shù),類型都會(huì)編譯無法通過)示例: @Override publicvoiddoRequest(SipServletRequestreq)throwsServletException, IOException建議避免在一行代碼或表達(dá)式的中間插入注釋。(1.42+)說明:除非必要,不應(yīng)在代碼或表達(dá)中間插入注釋,否則容易使代碼可理解性變差。在代碼的功能、意圖層次上進(jìn)行注釋,提供有用、額外的信息。(1.42+)說明:注釋的目的是解釋代碼的目的、功能和采用的方法,提供代碼以外的信息,幫助讀者理解代碼,防止沒必要的重復(fù)注釋信息。示例:如下注釋意義不大。//如果receiveFlag為真if(receiveFlag)而如下的注釋則給出了額外有用的信息。//如果從連結(jié)收到消息if(receiveFlag)對(duì)關(guān)鍵變量的定義和分支語句(條件分支、循環(huán)語句等)必須編寫注釋。(1.42+)說明:這些語句往往是程序?qū)崿F(xiàn)某一特定功能的關(guān)鍵,對(duì)于維護(hù)人員來說,良好的注釋幫助更好的理解程序,有時(shí)甚至優(yōu)于看設(shè)計(jì)文檔。注釋應(yīng)考慮程序易讀及外觀排版的因素,使用的語言若是中、英兼有的,建議多使用中文,除非能用非常流利準(zhǔn)確的英文表達(dá)。中文注釋中需使用中文標(biāo)點(diǎn)。方法和類描述的第一句話盡量使用簡(jiǎn)潔明了的話概括一下功能,然后加以句號(hào)。接下來的部分可以詳細(xì)描述。(1.42+)說明:注釋語言不統(tǒng)一,影響程序易讀性和外觀排版,出于對(duì)維護(hù)人員的考慮,建議使用中文。JavaDoc工具收集簡(jiǎn)介的時(shí)候使用選取第一句話。方法內(nèi)的單行注釋使用//。(1.42+)說明:調(diào)試程序的時(shí)候可以方便的使用/*。。。*/注釋掉一長(zhǎng)段程序。一些復(fù)雜的代碼需要說明。(1.42+)示例:這里主要是對(duì)閏年算法的說明。 //1.如果能被4整除,是閏年; //2.如果能被100整除,不是閏年; //3.如果能被400整除,是閏年。使用Html標(biāo)簽使JavaDoc生成更加美觀。(1.42+)示例:/***Returnsahashcodeforthisstring.Thehashcodefora*<code>String</code>objectiscomputedas*<blockquote><pre>*s[0]*31^(n-1)+s[1]*31^(n-2)+...+s[n-1]*</pre></blockquote>*using<code>int</code>arithmetic,where<code>s[i]</code>isthe*<i>i</i>thcharacterofthestring,<code>n</code>isthelength*of*thestring,and<code>^</code>indicatesexponentiation.*(Thehashvalueoftheemptystringiszero.)**@returnahashcodevalueforthisobject.*/publicinthashCode() 生成后的JavaDoc生成后的JavaDoc命名規(guī)則類名和接口使用類意義完整的英文描述,每個(gè)英文單詞的首字母使用大寫、其余字母使用小寫的大小寫混合法。(1.42+)示例:OrderInformation,CustomerList,LogManager,LogConfig,SmpTransaction方法名使用類意義完整的英文描述:第一個(gè)單詞的字母使用小寫、剩余單詞首字母大寫其余字母小寫的大小寫混合法。(1.42+)示例:privatevoidcalculateRate();publicvoidaddNewOrder();方法中,存取屬性的方法采用setter和getter方法,動(dòng)作方法采用動(dòng)詞和動(dòng)賓結(jié)構(gòu)。(1.42+)格式:get+非布爾屬性名()is+布爾屬性名()set+屬性名()動(dòng)詞()動(dòng)詞+賓語()示例:publicStringgetType();publicbooleanisFinished();publicvoidsetVisible(boolean);publicvoidshow();publicvoidaddKeyListener(Listener);屬性名使用意義完整的英文描述,第一個(gè)單詞的字母使用小寫,剩余單詞首字母大寫其余字母小寫的大小寫混合法。屬性名不能與方法名相同。(1.42+)示例:privatecustomerName;privateorderNumber;privatesmpSession;常量名使用全大寫的英文描述,英文單詞之間用下劃線分隔開,并且使用staticfinal修飾。(1.42+)示例:publicstaticfinalintMAX_VALUE=1000;publicstaticfinalStringDEFAULT_START_DATE="2001-12-08";建議包名采用域后綴倒置的加上自定義的包名,采用小寫字母,都應(yīng)該以com.XXXX開頭(不包括一些特殊原因)。在部門內(nèi)部應(yīng)該規(guī)劃好包名的范圍,防止產(chǎn)生沖突。部門內(nèi)部產(chǎn)品使用部門的名稱加上模塊名稱。產(chǎn)品線的產(chǎn)品使用產(chǎn)品的名稱加上模塊的名稱。(1.42+)說明:除特殊原因包結(jié)構(gòu)都必須以com.XXXX開頭,如果因?yàn)镺EM合作等關(guān)系,可以不做要求。格式:com.XXXX.產(chǎn)品名.模塊名稱示例:融合WEBSMAP包名com.XXXX.iin.websmap通過對(duì)函數(shù)或過程、變量、結(jié)構(gòu)等正確的命名以及合理地組織代碼的結(jié)構(gòu),使代碼成為自注釋的。(1.42+)說明:清晰準(zhǔn)確的函數(shù)、變量等的命名,可增加代碼可讀性,并減少不必要的注釋。常用組件類的命名以組件名加上組件類型名結(jié)尾。(1.42+)示例:Application類型的,命名以App結(jié)尾——MainAppFrame類型的,命名以Frame結(jié)尾——TopoFramePanel類型的,建議命名以Panel結(jié)尾——CreateCircuitPanelBean類型的,建議命名以Bean結(jié)尾——DataAccessBeanEJB類型的,建議命名以EJB結(jié)尾——DBProxyEJBApplet類型的,建議命名以Applet結(jié)尾——PictureShowApplet如果函數(shù)名超過15個(gè)字母,可采用以去掉元音字母的方法或者以行業(yè)內(nèi)約定俗成的縮寫方式縮寫函數(shù)名。(1.42+)示例:getCustomerInformation()改為getCustomerInfo()準(zhǔn)確地確定成員函數(shù)的存取控制符號(hào):只是該類內(nèi)部調(diào)用的函數(shù)使用private屬性,繼承類可以使用的使用protected屬性,同包類可以調(diào)用的使用默認(rèn)屬性(不加屬性控制符號(hào)),對(duì)外公開的函數(shù)使用public屬性(1.42+)示例:protectedvoidgetUserName(){ 。。。。。。}privatevoidcalculateRate(){ 。。。。。。}含有集合意義的屬性命名,盡量包含其復(fù)數(shù)的意義。(1.42+)示例:customers,orderItems編碼規(guī)則數(shù)據(jù)庫操作、IO操作等需要使用結(jié)束close()的對(duì)象必須在try-catch-finally的finally中close(),如果有多個(gè)IO對(duì)象需要close(),需要分別對(duì)每個(gè)對(duì)象的close()方法進(jìn)行try-catch,防止一個(gè)IO對(duì)象關(guān)閉失敗其他IO對(duì)象都未關(guān)閉。(1.42+)示例:try{//......}catch(IOExceptionioe){//......}finally{try{out.close();}catch(IOExceptionioe){//......}try{in.close();}catch(IOExceptionioe){//......}}系統(tǒng)非正常運(yùn)行產(chǎn)生的異常捕獲后,如果不對(duì)該異常進(jìn)行處理,則應(yīng)該記錄日志。(1.42+)說明:此規(guī)則指通常的系統(tǒng)非正常運(yùn)行產(chǎn)生的異常,不包括一些基于異常的設(shè)計(jì)。若有特殊原因必須用注釋加以說明。示例:try{//...}catch(IOExceptionioe){logger.error(ioe);}自己拋出的異常必須要填寫詳細(xì)的描述信息。(1.42+)說明:便于問題定位。示例:thrownewIOException("Writingdataerror!Data:"+data.toString());運(yùn)行時(shí)異常使用RuntimeException的子類來表示,不用在可能拋出異常的方法聲明上加throws子句。非運(yùn)行期異常是從Exception繼承而來的,必須在方法聲明上加throws子句。(1.42+)說明:非運(yùn)行期異常是由外界運(yùn)行環(huán)境決定異常拋出條件的異常,例如文件操作,可能受權(quán)限、磁盤空間大小的影響而失敗,這種異常是程序本身無法避免的,需要調(diào)用者明確考慮該異常出現(xiàn)時(shí)該如何處理方法,因此非運(yùn)行期異常必須有throws子句標(biāo)出,不標(biāo)出或者調(diào)用者不捕獲該類型異常都會(huì)導(dǎo)致編譯失敗,從而防止程序員本身疏忽。運(yùn)行期異常是程序在運(yùn)行過程中本身考慮不周導(dǎo)致的異常,例如傳入錯(cuò)誤的參數(shù)等。拋出運(yùn)行期異常的目的是防止異常擴(kuò)散,導(dǎo)致定位困難。因此在做異常體系設(shè)計(jì)時(shí)要根據(jù)錯(cuò)誤的性質(zhì)合理選擇自定義異常的繼承關(guān)系。還有一種異常是Error繼承而來的,這種異常由虛擬機(jī)自己維護(hù),表示發(fā)生了致命錯(cuò)誤,程序無法繼續(xù)運(yùn)行例如內(nèi)存不足。我們自己的程序不應(yīng)該捕獲這種異常,并且也不應(yīng)該創(chuàng)建該種類型的異常。在程序中使用異常處理還是使用錯(cuò)誤返回碼處理,根據(jù)是否有利于程序結(jié)構(gòu)來確定,并且異常和錯(cuò)誤碼不應(yīng)該混合使用,推薦使用異常。(1.42+)說明:一個(gè)系統(tǒng)或者模塊應(yīng)該統(tǒng)一規(guī)劃異常類型和返回碼的含義。但是不能用異常來做一般流程處理的方式,不要過多地使用異常,異常的處理效率比條件分支低,而且異常的跳轉(zhuǎn)流程難以預(yù)測(cè)。注意:Java5.0程序內(nèi)部的錯(cuò)誤碼可以使用枚舉來表示。注意運(yùn)算符的優(yōu)先級(jí),并用括號(hào)明確表達(dá)式的操作順序,避免使用默認(rèn)優(yōu)先級(jí)。(1.42+)說明:防止閱讀程序時(shí)產(chǎn)生誤解,防止因默認(rèn)的優(yōu)先級(jí)與設(shè)計(jì)思想不符而導(dǎo)致程序出錯(cuò)。示例:下列語句中的表達(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)雖然不會(huì)出錯(cuò),但語句不易理解;(3)造成了判斷條件出錯(cuò)。避免使用不易理解的數(shù)字,用有意義的標(biāo)識(shí)來替代。涉及物理狀態(tài)或者含有物理意義的常量,不應(yīng)直接使用數(shù)字,必須用有意義的靜態(tài)變量或者枚舉來代替。使用異常來表示方法執(zhí)行錯(cuò)誤,而不是使用C++的錯(cuò)誤返回碼方式。(1.42+)示例:如下的程序可讀性差。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}注意:Java5.0下建議使用枚舉來表示。異常:publicvoidfunction(){ ... thrownewRuntimeException(“。。?!?;} 數(shù)組聲明的時(shí)候使用int[]index,而不要使用intindex[]。(1.42+)說明:使用intindex[]格式使程序的可讀性較差,int[]index表示聲明了一個(gè)int數(shù)組(int[])叫做index示例:如下程序可讀性差:publicintgetIndex()[]{}如下程序可讀性好:publicint[]getIndex(){}不要使用System.out與System.err進(jìn)行控制臺(tái)打印,應(yīng)該使用工具類(如:日志工具)進(jìn)行統(tǒng)一記錄或者打印。(1.42+)說明:代碼發(fā)布的時(shí)候可以統(tǒng)一關(guān)閉控制臺(tái)打印,代碼調(diào)試的時(shí)候又可以打開控制臺(tái)打印,方便調(diào)試。用調(diào)測(cè)開關(guān)來切換軟件的DEBUG版和正式版,而不要同時(shí)存在正式版本和DEBUG版本的不同源文件,以減少維護(hù)的難度。 (1.42+)集合必須指定模板類型(5.0+)說明:方便程序閱讀,除去強(qiáng)制轉(zhuǎn)換代碼示例:Map<String,MyObject>map=newHashMap<String,MyObject>();一個(gè)文件不要定義兩個(gè)類(并非指內(nèi)部類)。(1.42+)說明:方便程序的閱讀與代碼的維護(hù) 所有的數(shù)據(jù)類必須覆寫toString()、hashCode()、equals()方法,toString()方法返回該類有意義的內(nèi)容。(1.42+)說明:方便數(shù)據(jù)類的比較,父類如果實(shí)現(xiàn)了比較合理的toString(),子類可以繼承不必再重寫。hashCode與equals可以使用eclipse自動(dòng)生成。示例:publicTopoNode{privateStringnodeName;publicStringtoString(){return"NodeName:"+nodeName;}}判斷語句不要使用”*==true”來判斷為真說明:方便閱讀,減少?zèng)]有必要的計(jì)算以下錯(cuò)誤:if(ok==true){ ……}以下正確:if(ok){ ……}不要寫沒有必要的向上強(qiáng)制轉(zhuǎn)型。(1.42+)說明:沒必要寫的向上強(qiáng)制轉(zhuǎn)型會(huì)浪費(fèi)性能,增加代碼閱讀難度示例:以下錯(cuò)誤:FileInputStreamfis=newFileInputStream(f);InputStreamis=(InputStream)fis;建議記錄異常不要保存exception.getMessage(),而要記錄exception.toString(),一般可通過日志工具記錄完整的異常堆棧信息。(1.42+)說明:NullPointException拋出時(shí)常常描述為空,這樣往往看不出是出了什么錯(cuò)。示例:try{...}catch(FileNotFoundExceptione){logger.error(e); }一個(gè)方法不應(yīng)拋出太多類型的異常。(1.42+)說明:如果程序中需要分類處理,則將異常根據(jù)分類組織成繼承關(guān)系。如果確實(shí)有很多異常類型首先考慮用異常描述來區(qū)別,throws/exception子句標(biāo)明的異常最好不要超過三個(gè)。異常捕獲盡量不要直接catch(Exceptionex),應(yīng)該把異常細(xì)分處理。(1.42+)說明:可以設(shè)計(jì)更合理異常處理分支如果多段代碼重復(fù)做同一件事情,那么在方法的劃分上可能存在問題。(1.42+)說明:若此段代碼各語句之間有實(shí)質(zhì)性關(guān)聯(lián)并且是完成同一件功能的,那么可考慮把此段代碼構(gòu)造成一個(gè)新的方法。集合中的數(shù)據(jù)如果不使用了應(yīng)該及時(shí)釋放,尤其是可重復(fù)使用的集合。(1.42+)說明:由于集合保存了對(duì)象的引用,虛擬機(jī)的垃圾收集器就不會(huì)回收。源程序中關(guān)系較為緊密的代碼應(yīng)盡可能相鄰。(1.42+)說明:便于程序閱讀和查找。示例:矩形的長(zhǎng)與寬關(guān)系較密切,放在一起。rect.length=10;rect.width=5;不要使用難懂的技巧性很高的語句,除非很有必要時(shí)。(1.42+)說明:高技巧語句不等于高效率的程序,實(shí)際上程序的效率關(guān)鍵在于設(shè)計(jì)與算法。明確方法功能,精確(而不是近似)地實(shí)現(xiàn)方法設(shè)計(jì)。一個(gè)函數(shù)僅完成一件功能,即使簡(jiǎn)單功能也編寫方法實(shí)現(xiàn)。(1.42+)說明:雖然為僅用一兩行就可完成的功能去編方法好象沒有必要,但用方法可使功能明確化,增加程序可讀性,亦可方便維護(hù)、測(cè)試。應(yīng)明確規(guī)定對(duì)接口方法參數(shù)的合法性檢查應(yīng)由方法的調(diào)用者負(fù)責(zé)還是由接口方法本身負(fù)責(zé),缺省是由方法調(diào)用者負(fù)責(zé)。(1.42+)說明:對(duì)于模塊間接口方法的參數(shù)的合法性檢查這一問題,往往有兩個(gè)極端現(xiàn)象,即:要么是調(diào)用者和被調(diào)用者對(duì)參數(shù)均不作合法性檢查,結(jié)果就遺漏了合法性檢查這一必要的處理過程,造成問題隱患;要么就是調(diào)用者和被調(diào)用者均對(duì)參數(shù)進(jìn)行合法性檢查,這種情況雖不會(huì)造成問題,但產(chǎn)生了冗余代碼,降低了效率。盡量使用Java5.0新循環(huán)寫法。(5.0+)說明:代碼更加簡(jiǎn)潔示例:ArrayList<String>list=newArrayList<String>();list.add...for(Stringstr:list){ System.out.println(str);} 使用Java5.0枚舉來替代以前用數(shù)字與字符串的同等目的的操作。(5.0+)說明:Java5.0以前沒有枚舉,大家都用數(shù)字或者字符串做枚舉同樣功能的事情示例:publicenumEnumDemo{ERROR,INFO,DEBUG}Inotherfunction:EnumDemot=EnumDemo.DEBUG;if(t==EnumDemo.ERROR){ 。。。。。。}interface中定義的常量不要寫public、static、final的修飾詞,方法不要寫public修飾詞。(1.42+)說明:更加簡(jiǎn)潔示例:publicinterfaceInterfaceT{StringTT="abcl";voiddoStart();}新起一個(gè)線程,都要使用Thread.setName(“…”)設(shè)置線程名。說明:性能測(cè)試時(shí)可對(duì)線程狀態(tài)進(jìn)行監(jiān)控,異常時(shí)也可以知道異常發(fā)生在哪個(gè)線程中性能與可靠性規(guī)則對(duì)Debug,Info級(jí)別日志輸出前必須對(duì)當(dāng)前的調(diào)試等級(jí)先進(jìn)行判斷。(1.42+)說明:日志一般都會(huì)有不少字符串的處理,如果不是Debug級(jí)別就沒有必要進(jìn)

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論