版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
-.z.DKBA華為技術(shù)企業(yè)技術(shù)規(guī)DKBA1040-2001.12代替〔DKBA200106-003〕Java語言編程規(guī)2001-12-**發(fā)布 2001-12-**實(shí)施華為技術(shù)**發(fā)布-.z.目次前言.................................................................................31圍112規(guī)性引用文件113術(shù)語和定義114排版規(guī)124.1規(guī)則121.*程序塊要采用縮進(jìn)風(fēng)格編寫,縮進(jìn)的空格數(shù)為4個(gè)。122.*分界符〔如大括號‘{’和‘}’〕應(yīng)各獨(dú)占一行并且位于同一列,同時(shí)與引用它們的語句左對齊。在函數(shù)體的開場、類和接口的定義、以及if、for、do、while、switch、case語句中的程序都要采用如上的縮進(jìn)方式。123.*較長的語句、表達(dá)式或參數(shù)〔>80字符〕要分成多行書寫,長表達(dá)式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首,劃分出的新行要進(jìn)展適當(dāng)?shù)目s進(jìn),使排版整齊,語句可讀。134.*不允許把多個(gè)短語句寫在一行中,即一行只寫一條語句135.*if,for,do,while,case,switch,default等語句自占一行,且if,for,do,while等語句的執(zhí)行語句無論多少都要加括號{}。136.*相對獨(dú)立的程序塊之間、變量說明之后必須加空行。137.*對齊只使用空格鍵,不使用TAB鍵。148.*在兩個(gè)以上的關(guān)鍵字、變量、常量進(jìn)展對等操作時(shí),它們之間的操作符之前、之后或者前后要加空格;進(jìn)展非對等操作時(shí),如果是關(guān)系密切的立即操作符〔如.〕,后不應(yīng)加空格。144.2建議151.類屬性和類方法不要穿插放置,不同存取圍的屬性或者方法也盡量不要穿插放置。155注釋規(guī)165.1規(guī)則161.一般情況下,源程序有效注釋量必須在30%以上。162.包的注釋:包的注釋寫入一個(gè)名為package.html的HTML格式的說明文件放入當(dāng)前路徑。163.包的注釋容:簡述本包的作用、詳細(xì)描述本包的容、產(chǎn)品模塊名稱和版本、公司。164.文件注釋:文件注釋寫入文件頭部,包名之前的位置。165.文件注釋容:說明、描述信息、生成日期、修改歷史。176.類和接口的注釋:該注釋放在package關(guān)鍵字之后,class或者interface關(guān)鍵字之前。187.類和接口的注釋容:類的注釋主要是一句話功能簡述、功能詳細(xì)描述,188.類屬性、公有和保護(hù)方法注釋:寫在類屬性、公有和保護(hù)方法上面。199.成員變量注釋容:成員變量的意義、目的、功能,可能被用到的地方。1910.公有和保護(hù)方法注釋容:列出方法的一句話功能簡述、功能詳細(xì)描述、輸入?yún)?shù)、輸出參數(shù)、返回值、違例等。1911.對于方法部用throw語句拋出的異常,必須在方法的注釋中標(biāo)明,對于所調(diào)用的其他方法所拋出的異常,選擇主要的在注釋中說明。對于非RuntimeE*ception,即throws子句聲明會(huì)拋出的異常,必須在方法的注釋中標(biāo)明。2012.*注釋應(yīng)與其描述的代碼相近,對代碼的注釋應(yīng)放在其上方或右方〔對單條語句的注釋〕相鄰位置,不可放在下面,如放于上方則需與其上面的代碼用空行隔開。2013.*注釋與所描述容進(jìn)展同樣的縮排。2014.*將注釋與其上面的代碼用空行隔開。2115.*對變量的定義和分支語句〔條件分支、循環(huán)語句等〕必須編寫注釋。2116.*對于switch語句下的case語句,如果因?yàn)樘厥馇闆r需要處理完一個(gè)case后進(jìn)入下一個(gè)case處理,必須在該case語句處理完、下一個(gè)case語句前加上明確的注釋。2117.*邊寫代碼邊注釋,修改代碼同時(shí)修改相應(yīng)的注釋,以保證注釋與代碼的一致性。不再有用的注釋要?jiǎng)h除。2118.*注釋的容要清楚、明了,含義準(zhǔn)確,防止注釋二義性。2119.*防止在注釋中使用縮寫,特別是不常用縮寫。215.1建議211.*防止在一行代碼或表達(dá)式的中間插入注釋。222.*通過對函數(shù)或過程、變量、構(gòu)造等正確的命名以及合理地組織代碼的構(gòu)造,使代碼成為自注釋的。223.*在代碼的功能、意圖層次上進(jìn)展注釋,提供有用、額外的信息。224.*在程序塊的完畢行右方加注釋標(biāo)記,以說明*程序塊的完畢。225.*注釋應(yīng)考慮程序易讀及外觀排版的因素,使用的語言假設(shè)是中、英兼有的,建議多使用中文,除非能用非常流利準(zhǔn)確的英文表達(dá)。226.方法的單行注釋使用//。227.注釋盡量使用中文注釋和中文標(biāo)點(diǎn)。方法和類描述的第一句話盡量使用簡潔明了的話概括一下功能,然后加以句號。接下來的局部可以詳細(xì)描述。238.順序?qū)崿F(xiàn)流程的說明使用1、2、3、4在每個(gè)實(shí)現(xiàn)步驟局部的代碼前面進(jìn)展注釋。239.一些復(fù)雜的代碼需要說明。236命名規(guī)246.1規(guī)則241.包名采用域后綴倒置的加上自定義的包名,采用小寫字母。在部門部應(yīng)該規(guī)劃好包名的圍,防止產(chǎn)生沖突。部門部產(chǎn)品使用部門的名稱加上模塊名稱。產(chǎn)品線的產(chǎn)品使用產(chǎn)品的名稱加上模塊的名稱。242.類名和接口使用類意義完整的英文描述,每個(gè)英文單詞的首字母使用大寫、其余字母使用小寫的大小寫混合法。243.方法名使用類意義完整的英文描述:第一個(gè)單詞的字母使用小寫、剩余單詞首字母大寫其余字母小寫的大小寫混合法。244.方法中,存取屬性的方法采用setter和getter方法,動(dòng)作方法采用動(dòng)詞和動(dòng)賓構(gòu)造。245.屬性名使用意義完整的英文描述:第一個(gè)單詞的字母使用小寫、剩余單詞首字母大寫其余字母小寫的大小寫混合法。屬性名不能與方法名一樣。256.常量名使用全大寫的英文描述,英文單詞之間用下劃線分隔開,并且使用finalstatic修飾。257.屬性名可以和公有方法參數(shù)一樣,不能和局部變量一樣,引用非靜態(tài)成員變量時(shí)使用this引用,引用靜態(tài)成員變量時(shí)使用類名引用。256.2建議251.常用組件類的命名以組件名加上組件類型名結(jié)尾。252.如果函數(shù)名超過15個(gè)字母,可采用以去掉元音字母的方法或者以行業(yè)約定俗成的縮寫方式縮寫函數(shù)名。263.準(zhǔn)確地確定成員函數(shù)的存取控制符號,不是必須使用public屬性的,請使用protected,不是必須使用protected,請使用private。264.含有集合意義的屬性命名,盡量包含其復(fù)數(shù)的意義。267編碼規(guī)277.1規(guī)則271.*明確方法功能,準(zhǔn)確〔而不是近似〕地實(shí)現(xiàn)方法設(shè)計(jì)。一個(gè)函數(shù)僅完成一件功能,即使簡單功能也應(yīng)該編寫方法實(shí)現(xiàn)。272.應(yīng)明確規(guī)定對接口方法參數(shù)的合法性檢查應(yīng)由方法的調(diào)用者負(fù)責(zé)還是由接口方法本身負(fù)責(zé),缺省是由方法調(diào)用者負(fù)責(zé)。273.明確類的功能,準(zhǔn)確〔而不是近似〕地實(shí)現(xiàn)類的設(shè)計(jì)。一個(gè)類僅實(shí)現(xiàn)一組相近的功能。274.所有的數(shù)據(jù)類必須重載toString()方法,返回該類有意義的容。275.數(shù)據(jù)庫操作、IO操作等需要使用完畢close()的對象必須在try-catch-finally的finally中close()。276.異常捕獲后,如果不對該異常進(jìn)展處理,則應(yīng)該紀(jì)錄日志或者e*.printStackTrace()。287.自己拋出的異常必須要填寫詳細(xì)的描述信息。288.運(yùn)行期異常使用RuntimeE*ception的子類來表示,不用在可能拋出異常的方法聲明上加throws子句。非運(yùn)行期異常是從E*ception繼承而來的,必須在方法聲明上加throws子句。299.在程序中使用異常處理還是使用錯(cuò)誤返回碼處理,根據(jù)是否有利于程序構(gòu)造來確定,并且異常和錯(cuò)誤碼不應(yīng)該混合使用,推薦使用異常。2910.*注意運(yùn)算符的優(yōu)先級,并用括號明確表達(dá)式的操作順序,防止使用默認(rèn)優(yōu)先級。2911.*防止使用不易理解的數(shù)字,用有意義的標(biāo)識來替代。涉及物理狀態(tài)或者含有物理意義的常量,不應(yīng)直接使用數(shù)字,必須用有意義的靜態(tài)變量來代替。2912.數(shù)組聲明的時(shí)候使用int[]inde*,而不要使用intinde*[]。3013.調(diào)試代碼的時(shí)候,不要使用System.out和System.err進(jìn)展打印,應(yīng)該使用一個(gè)包含統(tǒng)一開關(guān)的測試類進(jìn)展統(tǒng)一打印。3014.用調(diào)測開關(guān)來切換軟件的DEBUG版和正式版,而不要同時(shí)存在正式版本和DEBUG版本的不同源文件,以減少維護(hù)的難度。307.2建議301.記錄異常不要保存e*ception.getMessage(),而要記錄e*ception.toString()。302.一個(gè)方法不應(yīng)拋出太多類型的異常。313.異常捕獲盡量不要直接catch(E*ceptione*),應(yīng)該把異常細(xì)分處理。314.*如果多段代碼重復(fù)做同一件事情,則在方法的劃分上可能存在問題。315.對于創(chuàng)立的主要的類,最好置入main()函數(shù),包含用于測試那個(gè)類的代碼。316.集合中的數(shù)據(jù)如果不使用了應(yīng)該及時(shí)釋放,尤其是可重復(fù)使用的集合。317.*源程序中關(guān)系較為嚴(yán)密的代碼應(yīng)盡可能相鄰。318.*不要使用難懂的技巧性很高的語句,除非很有必要時(shí)。318JTEST規(guī)328.1規(guī)則〔1-2級〕321.在switch中每個(gè)case語句都應(yīng)該包含break或者return。322.不要使用空的for、if、while語句。323.在運(yùn)算中不要減小數(shù)據(jù)的精度。324.switch語句中的case關(guān)鍵字要和后面的常量保持一個(gè)空格,switch語句中不要定義case之外的無用標(biāo)簽。325.不要在if語句中使用等號=進(jìn)展賦值操作。326.靜態(tài)成員或者方法使用類名訪問,不使用句柄訪問。327.方法重載的時(shí)候,一定要注意方法名一樣,防止類中使用兩個(gè)非常相似的方法名。328.不要在ponentListener.ponentResized()方法中調(diào)用serResize()方法。329.不要覆蓋父類的靜態(tài)方法和私有方法。3210.不要覆蓋父類的屬性。3211.不要使用兩級以上的部類。3212.把部類定義成私有類。3213.去掉接口中多余的定義〔不使用public,abstract,static,final等,這是接口中默認(rèn)的〕。3214.不要定義不會(huì)被用到的局部變量、類私有屬性、類私有方法和方法參數(shù)。3215.顯式初始化所有的靜態(tài)屬性。3216.不要使用System.getenv()方法。3217.不要硬編碼‘\n’和‘\r’作為換行符號。3218.不要直接使用java.awt.peer.*里面的接口。3219.使用System.arraycopy(),不使用循環(huán)來復(fù)制數(shù)組。3220.防止不必要的instanceof比擬運(yùn)算和類造型運(yùn)算。3221.不要在finalize()方法中刪除監(jiān)聽器〔Listeners〕。3222.在finalize()方法中一定要調(diào)用super.finalize()方法。3223.在finalize()方法中的finally中調(diào)用super.finalize()方法。3224.進(jìn)展字符轉(zhuǎn)換的時(shí)候應(yīng)該盡可能的較少臨時(shí)變量。3225.使用ObjectStream的方法后,調(diào)用reset(),釋放對象。3226.線程同步中,在循環(huán)里面使用條件測試〔使用while(isWait)wait()代替if(isWait)wait()〕。3227.不掉用Thread類的resume(),suspend(),stop()方法。3228.減小單個(gè)方法的復(fù)雜度,使用的if,while,for,switch語句要在10個(gè)以。3229.在Servlets中,重用JDBC連接的數(shù)據(jù)源。3230.減少在Sevlets中使用的同步方法。3231.不定義在包中沒有被用到的友好屬性、方法和類。3232.沒有子類的友好類應(yīng)該定義成final。3233.沒有被覆蓋的友好方法應(yīng)該定義成final。328.2建議〔3級或以上〕331.為switch語句提供一個(gè)default選項(xiàng)。332.不要在for循環(huán)體中對計(jì)數(shù)器的賦值。333.不要給非公有類定義public構(gòu)建器。334.不要對浮點(diǎn)數(shù)進(jìn)展比擬運(yùn)算,尤其是不要進(jìn)展==,!=運(yùn)算,減少>,<運(yùn)算。335.實(shí)現(xiàn)equals()方法時(shí),先用getClass()或者instanceof進(jìn)展類型比擬,通過后才能繼續(xù)比擬。336.不要重載main()方法用作除入口以外的其他用途。337.方法的參數(shù)名不要和類中的方法名一樣。338.除了構(gòu)建器外,不要使用和類名一樣的方法名。339.不要定義Error和RuntimeE*ception的子類,可以定義E*ception的子類。3310.線程中需要實(shí)現(xiàn)run()方法。3311.使用equals()比擬兩個(gè)類的值是否一樣。3312.字符串和數(shù)字運(yùn)算結(jié)果相連接的時(shí)候,應(yīng)該把數(shù)字運(yùn)算局部用小括號括起來。3313.類中不要使用非私有〔公有、保護(hù)和友好〕的非靜態(tài)屬性。3314.在類中對于沒有實(shí)現(xiàn)的接口,應(yīng)該定義成抽象方法,類應(yīng)該定義成抽象類?!?級〕3315.不要顯式導(dǎo)入java.lang.*包;3316.初始化時(shí)不要使用類的非靜態(tài)屬性。3317.顯式初始化所有的局部變量。3318.按照方法名把方法排序放置,同名合同類型的方法應(yīng)該放在一起。3319.不要使用嵌套賦值,即在一個(gè)表達(dá)式中使用多個(gè)=。3320.不要在抽象類的構(gòu)建器中調(diào)用抽象方法。3321.重載equals()方法的同時(shí),也應(yīng)該重載hashCode()方法。3322.工具類〔Utility〕不要定義構(gòu)建器,包括私有構(gòu)建器。3323.不要在switch中使用10個(gè)以上的case語句。3324.把main()方法放在類的最后。3325.聲明方法違例的時(shí)候不要使用E*ception,應(yīng)該使用它的子類。3326.不要直接扔出一個(gè)Error,應(yīng)該扔出它的子類。3327.在進(jìn)展比擬的時(shí)候,總是把常量放在同一邊〔都放在左邊或者都放在右邊〕。3328.在可能的情況下,總是為類定義一個(gè)缺省的構(gòu)建器。3329.在捕獲違例的時(shí)候,不使用E*ception,RuntimeE*ception,Throwable,盡可能使用它們的子類。3330.在接口或者工具類中中定義常量?!?級〕3331.使用大寫‘L’表示long常量?!?級〕3332.main()方法必須是publicstaticvoidmain(String[])?!?級〕3333.對返回類型為boolean的方法使用is開頭,其它類型的不能使用。3334.對非boolean類型取值方法〔getter〕使用get開頭,其它類型的不能使用。3335.對于設(shè)置值的方法〔setter〕使用set開頭,其它類型的不能使用。3336.方法需要有同樣數(shù)量參數(shù)的注釋param。3437.不要在注釋中使用不支持的標(biāo)記,如:unsupported。3438.不要使用Runtime.e*ec()方法。3439.不要自定義本地方法〔nativemethod〕。3440.使用盡量簡潔的的運(yùn)算符號。3441.使用集合時(shí)設(shè)置初始容量。3442.單個(gè)首字符的比擬使用charAt()而不用startsWith()。3443.對于被除數(shù)或者被乘數(shù)為2的n次方的乘除運(yùn)算使用移位運(yùn)算符>>,<<。3444.一個(gè)字符的連接使用‘’而不使用“〞,如:Stringa=b+'c'。3445.不要在循環(huán)體調(diào)用同步方法和使用try-catch塊。3446.不要使用不必要的布爾值比擬,如:if(a.equals(b)),而不是if(a.equals(b)==true)。3447.常量字符串使用String,非常量字符串使用StringBuffer。3448.在循環(huán)條件判斷的時(shí)候不要使用復(fù)雜的表達(dá)式。3449.對于“if(condition)do1;elsedo2;〞語句使用條件操作符“if(condition)"do1:do2;〞。3450.不要在循環(huán)體定義變量。3451.使用StringBuffer的時(shí)候設(shè)置初始容量。3452.盡可能的使用局部變量進(jìn)展運(yùn)算。3453.盡可能少的使用‘!’操作符?!?級〕3454.盡可能的對接口進(jìn)展instanceof運(yùn)算。〔5級〕3455.不要使用Date[]而要使用long[]替代。3456.不要顯式調(diào)用finalize()。3457.不要使用靜態(tài)集合,其存占用增長沒有邊界。3458.不要重復(fù)調(diào)用一個(gè)方法獲取對象,使用局部變量重用對象。3459.線程同步中,使用notifyAll()代替notify()。3460.防止在同步方法中調(diào)用另一個(gè)同步方法造成的死鎖。3461.非同步方法中不能調(diào)用wait(),notify()方法。3462.使用wait(),notify()代替while(),sleep()。3463.不要使用同步方法,使用同步塊。〔5級〕3464.把所有的公有方法定義為同步方法?!?級〕3465.實(shí)現(xiàn)的Runnable.run()方法必須是同步方法。〔5級〕3466.一個(gè)只有abstract方法、finalstatic屬性的類應(yīng)該定義成接口。3467.在clone()方法中應(yīng)該而且必須使用super.clone()而不是new。3468.常量必須定義為final。3469.在for循環(huán)中提供終止條件。3470.在for,while循環(huán)中使用增量計(jì)數(shù)。3471.使用StringTokenizer代替inde*Of()和substring()。3472.不要在構(gòu)建器中使用非final方法。3473.不要對參數(shù)進(jìn)展賦值操作?!?級〕3574.不要通過名字比擬兩個(gè)對象的類,應(yīng)該使用getClass()。3575.平安:盡量不要使用部類。3576.平安:盡量不要使類可以克隆。3577.平安:盡量不要使接口可以序列化。3578.平安:盡量不要使用友好方法、屬性和類。3579.Servlet:不要使用java.beans.Beans.instantiate()方法。3580.Servlet:不再使用HttpSession時(shí),應(yīng)該盡早使用invalidate()方法釋放。3581.Servlet:不再使用JDBC資源時(shí),應(yīng)該盡早使用close()方法釋放。3582.Servlet:不要使用Servlet的SingleThreadModel,會(huì)消耗大量資源。3583.國際化:不要使用一個(gè)字符進(jìn)展邏輯操作,使用Characater。3584.國際化:不要進(jìn)展字符串連接操作,使用MessageFormat。3585.國際化:不要使用Date.toString(),Time.toString()方法。3586.國際化:字符和字符串常量應(yīng)該放在資源文件中。3587.國際化:不要使用數(shù)字的toString()方法。3588.國際化:不要使用StringBuffer,StringTokenizer類。3589.國際化:不要使用String類的pareTo(),equals()方法。3590.復(fù)雜度:建議的最大規(guī)模:351參考文獻(xiàn)36前言本規(guī)是參考公司的"軟件編程規(guī)總則"和SUN公司"JavaCodingStyleGuide"結(jié)合而成的Java語言編程規(guī)。本規(guī)沒有涉及到的相關(guān)局部,請參見"軟件編程規(guī)總則"。本規(guī)由OMC與網(wǎng)管研究管理部,智能業(yè)務(wù)研究管理部提出。本規(guī)主要起草和解釋部門:OMC與網(wǎng)管研究管理部,智能業(yè)務(wù)研究管理部本規(guī)主要起草人:易雄志,晉,大偉,傅貴,童志剛,望岳本規(guī)主要審核人:本規(guī)批準(zhǔn)人:本規(guī)規(guī)所替代的歷次修訂情況和修訂人為:智能業(yè)務(wù)部對本規(guī)的以下方面進(jìn)展了補(bǔ)充和完善:1、排版規(guī),2、注釋規(guī),3、命名規(guī),4、編碼規(guī),5、JTEST規(guī)。并且按照最新模版進(jìn)展重新排版。Java語言編程規(guī)圍本規(guī)規(guī)定了使用Java語言編程時(shí)排版、注釋、命名、編碼和JTEST的規(guī)則和建議。本規(guī)適用于使用Java語言編程的部門和產(chǎn)品。規(guī)性引用文件以下文件中的條款通過本規(guī)的引用而成為本規(guī)的條款。但凡注日期的引用文件,其隨后所有的修改單〔不包括訂正的容〕或修訂版均不適用于本規(guī),然而,鼓勵(lì)根據(jù)本規(guī)達(dá)成協(xié)議的各方研究是否可使用這些文件的最新版本。但凡不注日期的引用文件,其最新版本適用于本規(guī)。序號編號名稱1公司-0000"軟件編程規(guī)總則"同總則的局部使用*號2公司-DKBA200106-003"Java語言編程規(guī)"術(shù)語和定義規(guī)則:編程時(shí)強(qiáng)制必須遵守的原則。建議:編程時(shí)必須加以考慮的原則。格式:對此規(guī)格式的說明。說明:對此規(guī)或建議進(jìn)展必要的解釋。例如:對此規(guī)或建議從正、反兩個(gè)方面給出例子。-.z.排版規(guī)規(guī)則1. *程序塊要采用縮進(jìn)風(fēng)格編寫,縮進(jìn)的空格數(shù)為4個(gè)。說明:對于由開發(fā)工具自動(dòng)生成的代碼可以有不一致。2. *分界符〔如大括號‘{’和‘}’〕應(yīng)各獨(dú)占一行并且位于同一列,同時(shí)與引用它們的語句左對齊。在函數(shù)體的開場、類和接口的定義、以及if、for、do、while、switch、case語句中的程序都要采用如上的縮進(jìn)方式。例如:如下例子不符合規(guī)。for(...){...//programcode}if(...){...//programcode}voide*ample_fun(void){...//programcode}應(yīng)如下書寫。for(...){...//programcode}if(...){...//programcode}voide*ample_fun(void){...//programcode}3. *較長的語句、表達(dá)式或參數(shù)〔>80字符〕要分成多行書寫,長表達(dá)式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首,劃分出的新行要進(jìn)展適當(dāng)?shù)目s進(jìn),使排版整齊,語句可讀。例如:if(filename!=null&&newFile(logPath+filename).length()<LogConfig.getFileSize()){...//programcode}publicstaticLogIteratorread(StringlogType,DatestartTime, DateendTime,intlogLevel,StringuserName,intbufferNum)4. *不允許把多個(gè)短語句寫在一行中,即一行只寫一條語句例如:如下例子不符合規(guī)。LogFilenamenow=null;LogFilenamethat=null;應(yīng)如下書寫LogFilenamenow=null;LogFilenamethat=null;5. *if,for,do,while,case,switch,default等語句自占一行,且if,for,do,while等語句的執(zhí)行語句無論多少都要加括號{}。例如:如下例子不符合規(guī)。if(writeToFile)writeFileTerrupt();應(yīng)如下書寫:if(writeToFile){writeFileTerrupt();}6. *相對獨(dú)立的程序塊之間、變量說明之后必須加空行。例如:如下例子不符合規(guī)。if(log.getLevel()<LogConfig.getRecordLevel()){return;}LogWriterwriter;應(yīng)如下書寫if(log.getLevel()<LogConfig.getRecordLevel()){return;}LogWriterwriter;intinde*;7. *對齊只使用空格鍵,不使用TAB鍵。說明:以免用不同的編輯器閱讀程序時(shí),因TAB鍵所設(shè)置的空格數(shù)目不同而造成程序布局不整齊。uilder、UltraEdit等編輯環(huán)境,支持行首TAB替換成空格,應(yīng)將該選項(xiàng)翻開。8. *在兩個(gè)以上的關(guān)鍵字、變量、常量進(jìn)展對等操作時(shí),它們之間的操作符之前、之后或者前后要加空格;進(jìn)展非對等操作時(shí),如果是關(guān)系密切的立即操作符〔如.〕,后不應(yīng)加空格。說明:采用這種松散方式編寫代碼的目的是使代碼更加清晰。由于留空格所產(chǎn)生的清晰性是相對的,所以,在已經(jīng)非常清晰的語句中沒有必要再留空格,如果語句已足夠清晰則括號側(cè)(即左括號后面和右括號前面)不需要加空格,多重括號間不必加空格,因?yàn)樵贘ava語言中括號已經(jīng)是最清晰的標(biāo)志了。在長語句中,如果需要加的空格非常多,則應(yīng)該保持整體清晰,而在局部不加空格。給操作符留空格時(shí)不要連續(xù)留兩個(gè)以上空格。例如:(1)逗號、分號只在后面加空格。inta,b,c;(2)比擬操作符,賦值操作符"="、"+=",算術(shù)操作符"+"、"%",邏輯操作符"&&"、"&",位域操作符"<<"、"^"等雙目操作符的前后加空格。if(current_time>=MA*_TIME_VALUE)a=b+c;a*=2;a=b^2;(3)"!"、"~"、"++"、"--"、"&"〔地址運(yùn)算符〕等單目操作符前后不加空格。flag=!isEmpty;//非操作"!"與容之間i++;//"++","--"與容之間(4)"."前后不加空格。p.id=pid;//"."前后不加空格(5)if、for、while、switch等與后面的括號間應(yīng)加空格,使if等關(guān)鍵字更為突出、明顯。if(a>=b&&c>d)建議1. 類屬性和類方法不要穿插放置,不同存取圍的屬性或者方法也盡量不要穿插放置。格式:類定義{類的公有屬性定義類的保護(hù)屬性定義類的私有屬性定義類的公有方法定義類的保護(hù)方法定義類的私有方法定義}-.z.注釋規(guī)規(guī)則1. 一般情況下,源程序有效注釋量必須在30%以上。說明:注釋的原則是有助于對程序的閱讀理解,在該加的地方都加了,注釋不宜太多也不能太少,注釋語言必須準(zhǔn)確、易懂、簡潔??梢杂米⑨尳y(tǒng)計(jì)工具來統(tǒng)計(jì)。2. 包的注釋:包的注釋寫入一個(gè)名為package.html的HTML格式的說明文件放入當(dāng)前路徑。說明:方便JavaDoc收集例如:/huawei/iin/websmap/m/package.html3. 包的注釋容:簡述本包的作用、詳細(xì)描述本包的容、產(chǎn)品模塊名稱和版本、公司。說明:在詳細(xì)描述中應(yīng)該說明這個(gè)包的作用以及在整個(gè)工程中的位置。格式:<html><body><p>一句話簡述。<p>詳細(xì)描述。<p>產(chǎn)品模塊名稱和版本<br>公司信息</body></html>例如:<html><body><P>為WEBSMAP提供通信類,上層業(yè)務(wù)使用本包的通信類與SMP-B進(jìn)展通信。<p>詳細(xì)描述。。。。。。。。<p>IINV100R001WEBSMAP<br>(C)所有2000-2001華為技術(shù)</body></html>4. 文件注釋:文件注釋寫入文件頭部,包名之前的位置。說明:注意以/*開場防止被JavaDoc收集例如:/**注釋容*/package.huawei.iin.websmap.m;5. 文件注釋容:說明、描述信息、生成日期、修改歷史。說明:文件名可選。格式:/**文件名:[文件名]*:〈〉*描述:〈描述〉*修改人:〈修改人〉*修改時(shí)間:YYYY-MM-DD*跟蹤單號:〈跟蹤單號〉*修改單號:〈修改單號〉*修改容:〈修改容〉*/說明:每次修改后在文件頭部寫明修改信息,CheckIn的時(shí)候可以直接把藍(lán)色字體信息粘貼到VSS的注釋上。在代碼受控之前可以免去。例如:/**文件名:LogManager.java*:Copyright2000-2001HuaweiTech.Co.Ltd.AllRightsReserved.*描述:WINV200R002WEBSMAP通用日志系統(tǒng)*修改人:三*修改時(shí)間:2001-02-16*修改容:新增*修改人:四*修改時(shí)間:2001-02-26*跟蹤單號:D20103*修改單號:WSS368*修改容:。。。。。。*修改人:王五*修改時(shí)間:2001-03-25*跟蹤單號:D27153*修改單號:WSS498*修改容:。。。。。。*/6. 類和接口的注釋:該注釋放在package關(guān)鍵字之后,class或者interface關(guān)鍵字之前。說明:方便JavaDoc收集例如:package.huawei.iin.websmap.m;/***注釋容*/publicclassmManager7. 類和接口的注釋容:類的注釋主要是一句話功能簡述、功能詳細(xì)描述,說明:可根據(jù)需要列出:版本號、生成日期、作者、容、功能、與其它類的關(guān)系等。如果一個(gè)類存在Bug,請如實(shí)說明這些Bug。格式:/***〈一句話功能簡述〉*〈功能詳細(xì)描述〉*author[作者]*version[版本號,YYYY-MM-DD]*see[相關(guān)類/方法]*since[產(chǎn)品/模塊版本]*deprecated*/說明:描述局部說明該類或者接口的功能、作用、使用方法和考前須知,每次修改后增加作者和更新版本號和日期,since表示從那個(gè)版本開場就有這個(gè)類或者接口,deprecated表示不建議使用該類或者接口。例如:/***LogManager類集中控制對日志讀寫的操作。*全部為靜態(tài)變量和靜態(tài)方法,對外提供統(tǒng)一接口。分配對應(yīng)日志類型的讀寫器,*讀取或?qū)懭敕蠗l件的日志紀(jì)錄。*author三,四,王五*version1.2,2001-03-25*seeLogIteraotor*seeBasicLog*sincemonLog1.0*/8. 類屬性、公有和保護(hù)方法注釋:寫在類屬性、公有和保護(hù)方法上面。例如:/***注釋容*/privateStringlogType;/***注釋容*/publicvoidwrite()9. 成員變量注釋容:成員變量的意義、目的、功能,可能被用到的地方。10. 公有和保護(hù)方法注釋容:列出方法的一句話功能簡述、功能詳細(xì)描述、輸入?yún)?shù)、輸出參數(shù)、返回值、違例等。格式:/***〈一句話功能簡述〉*〈功能詳細(xì)描述〉*param[參數(shù)1][參數(shù)1說明]*param[參數(shù)2][參數(shù)2說明]*return[返回類型說明]*e*ception/throws[違例類型][違例說明]*see[類、類*方法、類*成員]*deprecated*/說明:since表示從那個(gè)版本開場就有這個(gè)方法;e*ception或throws列出可能仍出的異常;deprecated表示不建議使用該方法。例如:/***根據(jù)日志類型和時(shí)間讀取日志。*分配對應(yīng)日志類型的LogReader,指定類型、查詢時(shí)間段、條件和反復(fù)器緩沖數(shù),*讀取日志記錄。查詢條件為null或0的表示沒有限制,反復(fù)器緩沖數(shù)為0讀不到日志。*查詢時(shí)間為左包含原則,即[startTime,endTime)。*paramlogTypeName日志類型名〔在配置文件中定義的〕*paramstartTime查詢?nèi)罩镜拈_場時(shí)間*paramendTime查詢?nèi)罩镜耐戤厱r(shí)間*paramlogLevel查詢?nèi)罩镜募墑e*paramuserName查詢該用戶的日志*parambufferNum日志反復(fù)器緩沖記錄數(shù)*return結(jié)果集,日志反復(fù)器*sincemonLog1.0*/publicstaticLogIteratorread(StringlogType,DatestartTime, DateendTime,intlogLevel,StringuserName,intbufferNum)11. 對于方法部用throw語句拋出的異常,必須在方法的注釋中標(biāo)明,對于所調(diào)用的其他方法所拋出的異常,選擇主要的在注釋中說明。對于非RuntimeE*ception,即throws子句聲明會(huì)拋出的異常,必須在方法的注釋中標(biāo)明。說明:異常注釋用e*ception或throws表示,在JavaDoc中兩者等價(jià),但推薦用e*ception標(biāo)注Runtime異常,throws標(biāo)注非Runtime異常。異常的注釋必須說明該異常的含義及什么條件下拋出該異常。12. *注釋應(yīng)與其描述的代碼相近,對代碼的注釋應(yīng)放在其上方或右方〔對單條語句的注釋〕相鄰位置,不可放在下面,如放于上方則需與其上面的代碼用空行隔開。13. *注釋與所描述容進(jìn)展同樣的縮排。說明:可使程序排版整齊,并方便注釋的閱讀與理解。例如:如下例子,排版不整齊,閱讀稍感不方便。publicvoide*ample(){//注釋CodeBlockOne//注釋CodeBlockTwo}應(yīng)改為如下布局。publicvoide*ample(){//注釋CodeBlockOne//注釋CodeBlockTwo}14. *將注釋與其上面的代碼用空行隔開。例如:如下例子,顯得代碼過于緊湊。//注釋programcodeone//注釋programcodetwo應(yīng)如下書寫://注釋programcodeone//注釋programcodetwo15. *對變量的定義和分支語句〔條件分支、循環(huán)語句等〕必須編寫注釋。說明:這些語句往往是程序?qū)崿F(xiàn)*一特定功能的關(guān)鍵,對于維護(hù)人員來說,良好的注釋幫助更好的理解程序,有時(shí)甚至優(yōu)于看設(shè)計(jì)文檔。16. *對于switch語句下的case語句,如果因?yàn)樘厥馇闆r需要處理完一個(gè)case后進(jìn)入下一個(gè)case處理,必須在該case語句處理完、下一個(gè)case語句前加上明確的注釋。說明:這樣比擬清楚程序編寫者的意圖,有效防止無故遺漏break語句。17. *邊寫代碼邊注釋,修改代碼同時(shí)修改相應(yīng)的注釋,以保證注釋與代碼的一致性。不再有用的注釋要?jiǎng)h除。18. *注釋的容要清楚、明了,含義準(zhǔn)確,防止注釋二義性。說明:錯(cuò)誤的注釋不但無益反而有害。19. *防止在注釋中使用縮寫,特別是不常用縮寫。說明:在使用縮寫時(shí)或之前,應(yīng)對縮寫進(jìn)展必要的說明。建議1. *防止在一行代碼或表達(dá)式的中間插入注釋。說明:除非必要,不應(yīng)在代碼或表達(dá)中間插入注釋,否則容易使代碼可理解性變差。2. *通過對函數(shù)或過程、變量、構(gòu)造等正確的命名以及合理地組織代碼的構(gòu)造,使代碼成為自注釋的。說明:清晰準(zhǔn)確的函數(shù)、變量等的命名,可增加代碼可讀性,并減少不必要的注釋。3. *在代碼的功能、意圖層次上進(jìn)展注釋,提供有用、額外的信息。說明:注釋的目的是解釋代碼的目的、功能和采用的方法,提供代碼以外的信息,幫助讀者理解代碼,防止沒必要的重復(fù)注釋信息。例如:如下注釋意義不大。//如果receiveFlag為真if(receiveFlag)而如下的注釋則給出了額外有用的信息。//如果從連結(jié)收到消息if(receiveFlag)4. *在程序塊的完畢行右方加注釋標(biāo)記,以說明*程序塊的完畢。說明:當(dāng)代碼段較長,特別是多重嵌套時(shí),這樣做可以使代碼更清晰,更便于閱讀。例如:參見如下例子。if(...){programcode1while(inde*<MA*_INDE*){programcode2}//endofwhile(inde*<MA*_INDE*)//指明該條while語句完畢}//endofif(...)//指明是哪條if語句完畢5. *注釋應(yīng)考慮程序易讀及外觀排版的因素,使用的語言假設(shè)是中、英兼有的,建議多使用中文,除非能用非常流利準(zhǔn)確的英文表達(dá)。說明:注釋語言不統(tǒng)一,影響程序易讀性和外觀排版,出于對維護(hù)人員的考慮,建議使用中文。6. 方法的單行注釋使用//。說明:調(diào)試程序的時(shí)候可以方便的使用/*。。。*/注釋掉一長段程序。7. 注釋盡量使用中文注釋和中文標(biāo)點(diǎn)。方法和類描述的第一句話盡量使用簡潔明了的話概括一下功能,然后加以句號。接下來的局部可以詳細(xì)描述。說明:JavaDoc工具收集簡介的時(shí)候使用選取第一句話。8. 順序?qū)崿F(xiàn)流程的說明使用1、2、3、4在每個(gè)實(shí)現(xiàn)步驟局部的代碼前面進(jìn)展注釋。例如:如下是對設(shè)置屬性的流程注釋 //1、判斷輸入?yún)?shù)是否有效。。。。。。 //2、設(shè)置本地變量。。。。。。。9. 一些復(fù)雜的代碼需要說明。例如:這里主要是對閏年算法的說明。 //1.如果能被4整除,是閏年; //2.如果能被100整除,不是閏年.; //3.如果能被400整除,是閏年.。-.z.命名規(guī)規(guī)則1. 包名采用域后綴倒置的加上自定義的包名,采用小寫字母。在部門部應(yīng)該規(guī)劃好包名的圍,防止產(chǎn)生沖突。部門部產(chǎn)品使用部門的名稱加上模塊名稱。產(chǎn)品線的產(chǎn)品使用產(chǎn)品的名稱加上模塊的名稱。格式:.huawei.產(chǎn)品名.模塊名稱.huawei.部門名稱.工程名稱例如:融合WEBSMAP包名通用消息轉(zhuǎn)發(fā)包名2. 類名和接口使用類意義完整的英文描述,每個(gè)英文單詞的首字母使用大寫、其余字母使用小寫的大小寫混合法。例如:OrderInformation,CustomerList,LogManager,LogConfig,SmpTransaction3. 方法名使用類意義完整的英文描述:第一個(gè)單詞的字母使用小寫、剩余單詞首字母大寫其余字母小寫的大小寫混合法。例如:privatevoidcalculateRate();publicvoidaddNewOrder();4. 方法中,存取屬性的方法采用setter和getter方法,動(dòng)作方法采用動(dòng)詞和動(dòng)賓構(gòu)造。格式:get+非布爾屬性名()is+布爾屬性名()set+屬性名()動(dòng)詞()動(dòng)詞+賓語()例如:publicStringgetType();publicbooleanisFinished();publicvoidsetVisible(boolean);publicvoidshow();publicvoidaddKeyListener(Listener);5. 屬性名使用意義完整的英文描述:第一個(gè)單詞的字母使用小寫、剩余單詞首字母大寫其余字母小寫的大小寫混合法。屬性名不能與方法名一樣。例如:privatecustomerName;privateorderNumber;privatesmpSession;6. 常量名使用全大寫的英文描述,英文單詞之間用下劃線分隔開,并且使用finalstatic修飾。例如:publicfinalstaticintMA*_VALUE=1000;publicfinalstaticStringDEFAULT_START_DATE="2001-12-08";7. 屬性名可以和公有方法參數(shù)一樣,不能和局部變量一樣,引用非靜態(tài)成員變量時(shí)使用this引用,引用靜態(tài)成員變量時(shí)使用類名引用。例如:publicclassPerson{privateStringname;privatestaticListproperties;publicvoidsetName(Stringname){=name;}publicvoidsetProperties(Listproperties){Pperties=properties;}建議1. 常用組件類的命名以組件名加上組件類型名結(jié)尾。例如:Application類型的,命名以App結(jié)尾——MainAppFrame類型的,命名以Frame結(jié)尾——TopoFramePanel類型的,建議命名以Panel結(jié)尾——CreateCircuitPanelBean類型的,建議命名以Bean結(jié)尾——DataAccessBeanE類型的,建議命名以E結(jié)尾——DBPro*yEApplet類型的,建議命名以Applet結(jié)尾——PictureShowApplet2. 如果函數(shù)名超過15個(gè)字母,可采用以去掉元音字母的方法或者以行業(yè)約定俗成的縮寫方式縮寫函數(shù)名。例如:getCustomerInformation()改為getCustomerInfo()3. 準(zhǔn)確地確定成員函數(shù)的存取控制符號,不是必須使用public屬性的,請使用protected,不是必須使用protected,請使用private。例如:protectedvoidsetUserName(),privatevoidcalculateRate()4. 含有集合意義的屬性命名,盡量包含其復(fù)數(shù)的意義。例如:customers,orderItems-.z.編碼規(guī)規(guī)則1. *明確方法功能,準(zhǔn)確〔而不是近似〕地實(shí)現(xiàn)方法設(shè)計(jì)。一個(gè)函數(shù)僅完成一件功能,即使簡單功能也應(yīng)該編寫方法實(shí)現(xiàn)。說明:雖然為僅用一兩行就可完成的功能去編方法好象沒有必要,但用方法可使功能明確化,增加程序可讀性,亦可方便維護(hù)、測試。2. 應(yīng)明確規(guī)定對接口方法參數(shù)的合法性檢查應(yīng)由方法的調(diào)用者負(fù)責(zé)還是由接口方法本身負(fù)責(zé),缺省是由方法調(diào)用者負(fù)責(zé)。說明:對于模塊間接口方法的參數(shù)的合法性檢查這一問題,往往有兩個(gè)極端現(xiàn)象,即:要么是調(diào)用者和被調(diào)用者對參數(shù)均不作合法性檢查,結(jié)果就遺漏了合法性檢查這一必要的處理過程,造成問題隱患;要么就是調(diào)用者和被調(diào)用者均對參數(shù)進(jìn)展合法性檢查,這種情況雖不會(huì)造成問題,但產(chǎn)生了冗余代碼,降低了效率。3. 明確類的功能,準(zhǔn)確〔而不是近似〕地實(shí)現(xiàn)類的設(shè)計(jì)。一個(gè)類僅實(shí)現(xiàn)一組相近的功能。說明:劃分類的時(shí)候,應(yīng)該盡量把邏輯處理、數(shù)據(jù)和顯示別離,實(shí)現(xiàn)類功能的單一性。例如:數(shù)據(jù)類不能包含數(shù)據(jù)處理的邏輯。通信類不能包含顯示處理的邏輯。4. 所有的數(shù)據(jù)類必須重載toString()方法,返回該類有意義的容。說明:父類如果實(shí)現(xiàn)了比擬合理的toString(),子類可以繼承不必再重寫。例如:publicTopoNode{privateStringnodeName;publicStringtoString(){return"NodeName:"+nodeName;}}5. 數(shù)據(jù)庫操作、IO操作等需要使用完畢close()的對象必須在try-catch-finally的finally中close()。例如:try{//......}catch(IOE*ceptionioe){//......}finally{try{out.close();}catch(IOE*ceptionioe){//......}}6. 異常捕獲后,如果不對該異常進(jìn)展處理,則應(yīng)該紀(jì)錄日志或者e*.printStackTrace()。說明:假設(shè)有特殊原因必須用注釋加以說明。例如:try{//.......}catch(IOE*ceptionioe){ioe.printStackTrace();}7. 自己拋出的異常必須要填寫詳細(xì)的描述信息。說明:便于問題定位。例如:thrownewIOE*ception("Writingdataerror!Data:"+data.toString());8. 運(yùn)行期異常使用RuntimeE*ception的子類來表示,不用在可能拋出異常的方法聲明上加throws子句。非運(yùn)行期異常是從E*ception繼承而來的,必須在方法聲明上加throws子句。說明:非運(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)行例如存缺乏。我們自己的程序不應(yīng)該捕獲這種異常,并且也不應(yīng)該創(chuàng)立該種類型的異常。9. 在程序中使用異常處理還是使用錯(cuò)誤返回碼處理,根據(jù)是否有利于程序構(gòu)造來確定,并且異常和錯(cuò)誤碼不應(yīng)該混合使用,推薦使用異常。說明:一個(gè)系統(tǒng)或者模塊應(yīng)該統(tǒng)一規(guī)劃異常類型和返回碼的含義。但是不能用異常來做一般流程處理的方式,不要過多地使用異常,異常的處理效率比條件分支低,而且異常的跳轉(zhuǎn)流程難以預(yù)測。10. *注意運(yùn)算符的優(yōu)先級,并用括號明確表達(dá)式的操作順序,防止使用默認(rèn)優(yōu)先級。說明:防止閱讀程序時(shí)產(chǎn)生誤解,防止因默認(rèn)的優(yōu)先級與設(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ò)。11. *防止使用不易理解的數(shù)字,用有意義的標(biāo)識來替代。涉及物理狀態(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}12. 數(shù)組聲明的時(shí)候使用int[]inde*,而不要使用intinde*[]。說明:使用intinde*[]格式使程序的可讀性較差例如:如下程序可讀性差:publicintgetInde*()[]{....}如下程序可讀性好:publicint[]getInde*(){....}13. 調(diào)試代碼的時(shí)候,不要使用System.out和System.err進(jìn)展打印,應(yīng)該使用一個(gè)包含統(tǒng)一開關(guān)的測試類進(jìn)展統(tǒng)一打印。說明:代碼發(fā)布的時(shí)候可以統(tǒng)一關(guān)閉調(diào)試代碼,定位問題的時(shí)候又可以翻開開關(guān)。14. 用調(diào)測開關(guān)來切換軟件的DEBUG版和正式版,而不要同時(shí)存在正式版本和DEBUG版本的不同源文件,以減少維護(hù)的難度。建議1. 記錄異常不要保存e*ception.getMessage(),而要記錄e*ception.toString()。例如:NullPointE*ception拋出時(shí)常常描述為空,這樣往往看不出是出了什么錯(cuò)。2. 一個(gè)方法不應(yīng)拋出太多類型的異常。說明:如果程序中需要分類處理,則將異常根據(jù)分類組織成繼承關(guān)系。如果確實(shí)有很多異常類型首先考慮用異常描述來區(qū)別,throws/e*ception子句標(biāo)明的異常最好不要超過三個(gè)。3. 異常捕獲盡量不要直接catch(E*ceptione*),應(yīng)該把異常細(xì)分處理。4. *如果多段代碼重復(fù)做同一件事情,則在方法的劃分上可能存在問題。說明:假設(shè)此段代碼各語句之間有實(shí)質(zhì)性關(guān)聯(lián)并且是完成同一件功能的,則可考慮把此段代碼構(gòu)造成一個(gè)新的方法。5. 對于創(chuàng)立的主要的類,最好置入main()函數(shù),包含用于測試那個(gè)類的代碼。說明:主要類包括:1、能完成獨(dú)立功能的類,如通訊。2、具有完整界面的類,如一個(gè)對話框、一個(gè)窗口、一個(gè)幀等。3、JavaBean類。例如:publicstaticvoidmain(String[]arguments){CreateCircuitDialogcircuitDialog1=newCreateCircuitDialog(null,"Ciruit",false);circuitDialog1.setVisible(true);}6. 集合中的數(shù)據(jù)如果不使用了應(yīng)該及時(shí)釋放,尤其是可重復(fù)使用的集合。說明:由于集合保存了對象的句柄,虛擬機(jī)的垃圾收集器就不會(huì)回收。7. *源程序中關(guān)系較為嚴(yán)密的代碼應(yīng)盡可能相鄰。說明:便于程序閱讀和查找。例如:矩形的長與寬關(guān)系較密切,放在一起。rect.length=10;rect.width=5;8. *不要使用難懂的技巧性很高的語句,除非很有必要時(shí)。說明:高技巧語句不等于高效率的程序,實(shí)際上程序的效率關(guān)鍵在于算法。-.z.JTEST規(guī)規(guī)則〔1-2級〕1. 在switch中每個(gè)case語句都應(yīng)該包含break或者return。2. 不要使用空的for、if、while語句。3. 在運(yùn)算中不要減小數(shù)據(jù)的精度。4. switch語句中的case關(guān)鍵字要和后面的常量保持一個(gè)空格,switch語句中不要定義case之外的無用標(biāo)簽。5. 不要在if語句中使用等號=進(jìn)展賦值操作。6. 靜態(tài)成員或者方法使用類名訪問,不使用句柄訪問。7. 方法重載的時(shí)候,一定要注意方法名一樣,防止類中使用兩個(gè)非常相似的方法名。8. 不要在ponentListener.ponentResized()方法中調(diào)用serResize()方法。9. 不要覆蓋父類的靜態(tài)方法和私有方法。10. 不要覆蓋父類的屬性。11. 不要使用兩級以上的部類。12. 把部類定義成私有類。13. 去掉接口中多余的定義〔不使用public,abstract,static,final等,這是接口中默認(rèn)的〕。14. 不要定義不會(huì)被用到的局部變量、類私有屬性、類私有方法和方法參數(shù)。15. 顯式初始化所有的靜態(tài)屬性。16. 不要使用System.getenv()方法。17. 不要硬編碼‘\n’和‘\r’作為換行符號。18. 不要直接使用java.awt.peer.*里面的接口。19. 使用System.arraycopy(),不使用循環(huán)來復(fù)制數(shù)組。20. 防止不必要的instanceof比擬運(yùn)算和類造型運(yùn)算。21. 不要在finalize()方法中刪除監(jiān)聽器〔Listeners〕。22. 在finalize()方法中一定要調(diào)用super.finalize()方法。23. 在finalize()方法中的finally中調(diào)用super.finalize()方法。24. 進(jìn)展字符轉(zhuǎn)換的時(shí)候應(yīng)該盡可能的較少臨時(shí)變量。25. 使用ObjectStream的方法后,調(diào)用reset(),釋放對象。26. 線程同步中,在循環(huán)里面使用條件測試〔使用while(isWait)wait()代替if(isWait)wait()〕。27. 不調(diào)用Thread類的resume(),suspend(),stop()方法。28. 減小單個(gè)方法的復(fù)雜度,使用的if,while,for,switch語句要在10個(gè)以。29. 在Servlets中,重用JDBC連接的數(shù)據(jù)源。30. 減少在Sevlets中使用的同步方法。31. 不定義在包中沒有被用到的友好屬性、方法和類。32. 沒有子類的友好類應(yīng)該定義成final。33. 沒有被覆蓋的友好方法應(yīng)該定義成final。建議〔3級或以上〕1. 為switch語句提供一個(gè)default選項(xiàng)。2. 不要在for循環(huán)體中對計(jì)數(shù)器的賦值。3. 不要給非公有類定義public構(gòu)建器。4. 不要對浮點(diǎn)數(shù)進(jìn)展比擬運(yùn)算,尤其是不要進(jìn)展==,!=運(yùn)算,減少>,<運(yùn)算。5. 實(shí)現(xiàn)equals()方法時(shí),先用getClass()或者instanceof進(jìn)展類型比擬,通過后才能繼續(xù)比擬。6. 不要重載main()方法用作除入口以外的其他用途。7. 方法的參數(shù)名不要和類中的方法名一樣。8. 除了構(gòu)建器外,不要使用和類名一樣的方法名。9. 不要定義Error和RuntimeE*ception的子類,可以定義E*ception的子類。10. 線程中需要實(shí)現(xiàn)run()方法。11. 使用equals()比擬兩個(gè)類的值是否一樣。12. 字符串和數(shù)字運(yùn)算結(jié)果相連接的時(shí)候,應(yīng)該把數(shù)字運(yùn)算局部用小括號括起來。13. 類中不要使用非私有〔公有、保護(hù)和友好〕的非靜態(tài)屬性。14. 在類中對于沒有實(shí)現(xiàn)的接口,應(yīng)該定義成抽象方法,類應(yīng)該定義成抽象類?!?級〕15. 不要顯式導(dǎo)入java.lang.*包;16. 初始化時(shí)不要使用類的非靜態(tài)屬性。17. 顯式初始化所有的局部變量。18. 按照方法名把方法排序放置,同名合同類型的方法應(yīng)該放在一起。19. 不要使用嵌套賦值,即在一個(gè)表達(dá)式中使用多個(gè)=。20. 不要在抽象類的構(gòu)建器中調(diào)用抽象方法。21. 重載equals()方法的同時(shí),也應(yīng)該重載h
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 環(huán)境局業(yè)務(wù)培訓(xùn)課件模板
- 物業(yè)公司員工宿舍管理制度
- 河南省漯河市2025-2026年高一上學(xué)期期末語文試卷(含答案)
- 2026及未來5年中國工藝陶瓷行業(yè)市場供需態(tài)勢及前景戰(zhàn)略研判報(bào)告
- 2026年及未來5年中國黃粉蟲養(yǎng)殖行業(yè)市場深度分析及投資策略報(bào)告
- 《FZT 42014-2014 桑蠶絲羊毛混紡絹絲》專題研究報(bào)告
- 固態(tài)電池產(chǎn)業(yè)園項(xiàng)目建議書
- 軍工品質(zhì)測試題庫及答案
- 四級英語試題及答案
- 消防安全月物業(yè)培訓(xùn)方案
- 中遠(yuǎn)海運(yùn)集團(tuán)筆試題目2026
- 2026年中國熱帶農(nóng)業(yè)科學(xué)院橡膠研究所高層次人才引進(jìn)備考題庫含答案詳解
- 2025-2026學(xué)年四年級英語上冊期末試題卷(含聽力音頻)
- 浙江省2026年1月普通高等學(xué)校招生全國統(tǒng)一考試英語試題(含答案含聽力原文含音頻)
- 2026屆川慶鉆探工程限公司高校畢業(yè)生春季招聘10人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 水廠及管網(wǎng)改擴(kuò)建工程施工節(jié)能降耗主要措施
- 2023-2024學(xué)年貴州省遵義市小學(xué)語文六年級期末評估測試題詳細(xì)參考答案解析
- 銷售心理學(xué)全集(2022年-2023年)
- 變態(tài)反應(yīng)課件
- 電力拖動(dòng)控制線路與技能訓(xùn)練-教案
- 50年同學(xué)聚會(huì)邀請函(十二篇)
評論
0/150
提交評論