Java語言編程規范(華為公司)_第1頁
Java語言編程規范(華為公司)_第2頁
Java語言編程規范(華為公司)_第3頁
Java語言編程規范(華為公司)_第4頁
Java語言編程規范(華為公司)_第5頁
已閱讀5頁,還剩21頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

Java語言編程規范(華為公司)DKBA華為技術有限公司企業技術規范DKBAXXXX-2001.12代替(DKBA200106-003)Java語言編程規范2001-12-XX發布2001-12-XX實施華為技術有限公司發布VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X目次前言................................................................................(3)1范圍112規范性引用文件113術語和定義114排版規范124.1規則121.*程序塊要采用縮進風格編寫,縮進12的空格數為4個。122.*分界符(如大括號‘{’和‘}’)應各獨占一行并且位于同一列,同時與引用它們的語句左對齊。在函數體的開始、類和接口的定義、以及if、for、do、while、switch、case語句中的程序都要采用如上的縮進方式。133.*較長的語句、表達式或參數(>80字符)要分成多行書寫,長表達式要在低優先級操作符處劃分新行,操作符放在新行之首,劃分出的新行要進行適當的縮進,使排版整齊,語句可讀。134.*不允許把多個短語句寫在一行中,即一行只寫一條語句5.*if,for,do,while,case,13switch,default等語句自占一行,且if,for,do,while等語句的執行語句無論多少都要加括號{}。6.*相對獨立的程序塊之間、變量說明13之后必須加空行。7.*對齊只使用空格鍵,不使用TAB鍵。14VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X8.*在兩個以上的關鍵字、變量、常量14進行對等操作時,它們之間的操作符之前、之后或者前后要加空格;進行非對等操作時,如果是關系密切的立即操作符(如.),后不應加空格。4.2建議15151.類屬性和類方法不要交叉放置,不同存取范圍的屬性或者方法也盡量不要交叉放置。5注釋規范165.1規則16161.一般情況下,源程序有效注釋量必須在30%以上。2.包的注釋:包的注釋寫入一個名為16package.html的HTML格式的說明文件放入當前路徑。3.包的注釋內容:簡述本包的作用、詳16細描述本包的內容、產品模塊名稱和版本、公司版權。4.文件注釋:文件注釋寫入文件頭部,16包名之前的位置。175.文件注釋內容:版權說明、描述信息、生成日期、修改歷史。6.類和接口的注釋:該注釋放在18package關鍵字之后,class或者interface關鍵字之前。187.類和接口的注釋內容:類的注釋主要是一句話功能簡述、功能詳細描述,8.類屬性、公有和保護方法注釋:寫在19類屬性、公有和保護方法上面。9.成員變量注釋內容:成員變量的意19義、目的、功能,可能被用到的地方。10.公有和保護方法注釋內容:列出方19法的一句話功能簡述、功能詳細描述、輸入參數、輸出參數、返回值、違例等。VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X2011.對于方法內部用throw語句拋出的異常,必須在方法的注釋中標明,對于所調用的其他方法所拋出的異常,選擇主要的在注釋中說明。對于非RuntimeException,即throws子句聲明會拋出的異常,必須在方法的注釋中標明。12.*注釋應與其描述的代碼相近,對代20碼的注釋應放在其上方或右方(對單條語句的注釋)相鄰位置,不可放在下面,如放于上方則需與其上面的代碼用空行隔開。13.*注釋與所描述內容進行同樣的縮20排。2114.*將注釋與其上面的代碼用空行隔開。15.*對變量的定義和分支語句(條件分21支、循環語句等)必須編寫注釋。2116.*對于switch語句下的case語句,如果因為特殊情況需要處理完一個case后進入下一個case處理,必須在該case語句處理完、下一個case語句前加上明確的注釋。17.*邊寫代碼邊注釋,修改代碼同時修21改相應的注釋,以保證注釋與代碼的一致性。不再有用的注釋要刪除。2118.*注釋的內容要清楚、明了,含義準確,防止注釋二義性。2119.*避免在注釋中使用縮寫,特別是不常用縮寫。5.1建議211.*避免在一行代碼或表達式的中間插22入注釋。222.*通過對函數或過程、變量、結構等正確的命名以及合理地組織代碼的結構,使代碼成為自注釋的。223.*在代碼的功能、意圖層次上進行注釋,提供有用、額外的信息。VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X4.*在程序塊的結束行右方加注釋標22記,以表明某程序塊的結束。225.*注釋應考慮程序易讀及外觀排版的因素,使用的語言若是中、英兼有的,建議多使用中文,除非能用非常流利準確的英文表達。6.方法內的單行注釋使用//。22237.注釋盡量使用中文注釋和中文標點。方法和類描述的第一句話盡量使用簡潔明了的話概括一下功能,然后加以句號。接下來的部分可以詳細描述。238.順序實現流程的說明使用1、2、3、4在每個實現步驟部分的代碼前面進行注釋。9.一些復雜的代碼需要說明。236命名規范246.1規則241.包名采用域后綴倒置的加上自定義24的包名,采用小寫字母。在部門內部應該規劃好包名的范圍,防止產生沖突。部門內部產品使用部門的名稱加上模塊名稱。產品線的產品使用產品的名稱加上模塊的名稱。2.類名和接口使用類意義完整的英文24描述,每個英文單詞的首字母使用大寫、其余字母使用小寫的大小寫混合法。3.方法名使用類意義完整的英文描述:24第一個單詞的字母使用小寫、剩余單詞首字母大寫其余字母小寫的大小寫混合法。244.方法中,存取屬性的方法采用setter和getter方法,動作方法采用動詞和動賓結構。VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X5.屬性名使用意義完整的英文描述:第25一個單詞的字母使用小寫、剩余單詞首字母大寫其余字母小寫的大小寫混合法。屬性名不能與方法名相同。256.常量名使用全大寫的英文描述,英文單詞之間用下劃線分隔開,并且使用finalstatic修飾。257.屬性名可以和公有方法參數相同,不能和局部變量相同,引用非靜態成員變量時使用this引用,引用靜態成員變量時使用類名引用。6.2建議25251.常用組件類的命名以組件名加上組件類型名結尾。262.如果函數名超過15個字母,可采用以去掉元音字母的方法或者以行業內約定俗成的縮寫方式縮寫函數名。263.準確地確定成員函數的存取控制符號,不是必須使用public屬性的,請使用protected,不是必須使用protected,請使用private。4.含有集合意義的屬性命名,盡量包含26其復數的意義。7編碼規范277.1規則27271.*明確方法功能,精確(而不是近似)地實現方法設計。一個函數僅完成一件功能,即使簡單功能也應該編寫方法實現。2.應明確規定對接口方法參數的合法27性檢查應由方法的調用者負責還是由接口方法本身負責,缺省是由方法調用者負責。3.明確類的功能,精確(而不是近似)27地實現類的設計。一個類僅實現一組相近的功能。274.所有的數據類必須重載toString()方法,返回該類有意義的內容。VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X5.數據庫操作、IO操作等需要使用結束27close()的對象必須在try-catch-finally的finally中close()。286.異常捕獲后,如果不對該異常進行處理,則應該紀錄日志或者ex.printStackTrace()。287.自己拋出的異常必須要填寫詳細的描述信息。8.運行期異常使用RuntimeException29的子類來表示,不用在可能拋出異常的方法聲明上加throws子句。非運行期異常是從Exception繼承而來的,必須在方法聲明上加throws子句。299.在程序中使用異常處理還是使用錯誤返回碼處理,根據是否有利于程序結構來確定,并且異常和錯誤碼不應該混合使用,推薦使用異常。2910.*注意運算符的優先級,并用括號明確表達式的操作順序,避免使用默認優先級。2911.*避免使用不易理解的數字,用有意義的標識來替代。涉及物理狀態或者含有物理意義的常量,不應直接使用數字,必須用有意義的靜態變量來代替。3012.數組聲明的時候使用int[]index,而不要使用intindex[]。3013.調試代碼的時候,不要使用System.out和System.err進行打印,應該使用一個包含統一開關的測試類進行統一打印。3014.用調測開關來切換軟件的DEBUG版和正式版,而不要同時存在正式版本和DEBUG版本的不同源文件,以減少維護的難度。7.2建議30VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X301.記錄異常不要保存exception.getMessage(),而要記錄exception.toString()。2.一個方法不應拋出太多類型的異常。313.異常捕獲盡量不要直接catch31(Exceptionex),應該把異常細分處理。314.*如果多段代碼重復做同一件事情,那么在方法的劃分上可能存在問題。5.對于創建的主要的類,最好置入31main()函數,包含用于測試那個類的代碼。316.集合中的數據如果不使用了應該及時釋放,尤其是可重復使用的集合。317.*源程序中關系較為緊密的代碼應盡可能相鄰。318.*不要使用難懂的技巧性很高的語句,除非很有必要時。8JTEST規范328.1規則(1-2級)32321.在switch中每個case語句都應該包含break或者return。322.不要使用空的for、if、while語句。3.在運算中不要減小數據的精度。32324.switch語句中的case關鍵字要和后面的常量保持一個空格,switch語句中不要定義case之外的無用標簽。5.不要在if語句中使用等號=進行賦32值操作。6.靜態成員或者方法使用類名訪問,不32使用句柄訪問。7.方法重載的時候,一定要注意方法名32相同,避免類中使用兩個非常相似的方法名。VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X8.不要在32/doc/0318126121.html,ponentResized()方法中調用serResize()方法。329.不要覆蓋父類的靜態方法和私有方法。10.不要覆蓋父類的屬性。3211.不要使用兩級以上的內部類。3212.把內部類定義成私有類。323213.去掉接口中多余的定義(不使用public,abstract,static,final等,這是接口中默認的)。3214.不要定義不會被用到的局部變量、類私有屬性、類私有方法和方法參數。15.顯式初始化所有的靜態屬性。3216.不要使用System.getenv()方法。3217.不要硬編碼‘\n’和‘\r’作為換32行符號。3218.不要直接使用java.awt.peer.*里面的接口。3219.使用System.arraycopy(),不使用循環來復制數組。3220.避免不必要的instanceof比較運算和類造型運算。3221.不要在finalize()方法中刪除監聽器(Listeners)。3222.在finalize()方法中一定要調用super.finalize()方法。3223.在finalize()方法中的finally中調用super.finalize()方法。3224.進行字符轉換的時候應該盡可能的較少臨時變量。3225.使用ObjectStream的方法后,調用reset(),釋放對象。3226.線程同步中,在循環里面使用條件測試(使用while(isWait)wait()代替if(isWait)wait())。VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X3227.不掉用Thread類的resume(),suspend(),stop()方法。28.減小單個方法的復雜度,使用的32if,while,for,switch語句要在10個以內。29.在Servlets中,重用JDBC連接的數32據源。30.減少在Sevlets中使用的同步方法。323231.不定義在包中沒有被用到的友好屬性、方法和類。32.沒有子類的友好類應該定義成32final。3233.沒有被覆蓋的友好方法應該定義成final。8.2建議(3級或以上)33331.為switch語句提供一個default選項。332.不要在for循環體中對計數器的賦值。3.不要給非公有類定義public構建33器。334.不要對浮點數進行比較運算,尤其是不要進行==,!=運算,減少>,<運算。335.實現equals()方法時,先用getClass()或者instanceof進行類型比較,通過后才能繼續比較。336.不要重載main()方法用作除入口以外的其他用途。7.方法的參數名不要和類中的方法名33相同。338.除了構建器外,不要使用和類名相同的方法名。9.不要定義Error和33RuntimeException的子類,可以定義Exception的子類。10.線程中需要實現run()方法。33VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X11.使用equals()比較兩個類的值是33否相同。3312.字符串和數字運算結果相連接的時候,應該把數字運算部分用小括號括起來。13.類中不要使用非私有(公有、保護33和友好)的非靜態屬性。3314.在類中對于沒有實現的接口,應該定義成抽象方法,類應該定義成抽象類。(5級)15.不要顯式導入/doc/0318126121.html,ng.*包;333316.初始化時不要使用類的非靜態屬性。17.顯式初始化所有的局部變量。333318.按照方法名把方法排序放置,同名合同類型的方法應該放在一起。3319.不要使用嵌套賦值,即在一個表達式中使用多個=。3320.不要在抽象類的構建器中調用抽象方法。3321.重載equals()方法的同時,也應該重載hashCode()方法。3322.工具類(Utility)不要定義構建器,包括私有構建器。3323.不要在switch中使用10個以上的case語句。24.把main()方法放在類的最后。333325.聲明方法違例的時候不要使用Exception,應該使用它的子類。3326.不要直接扔出一個Error,應該扔出它的子類。27.在進行比較的時候,總是把常量放33在同一邊(都放在左邊或者都放在右邊)。3328.在可能的情況下,總是為類定義一個缺省的構建器。VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X29.在捕獲違例的時候,不使用33Exception,RuntimeException,Throwable,盡可能使用它們的子類。3330.在接口或者工具類中中定義常量。(5級)3331.使用大寫‘L’表示long常量。(5級)3332.main()方法必須是publicstaticvoidmain(String[])。(5級)33.對返回類型為boolean的方法使33用is開頭,其它類型的不能使用。34.對非boolean類型取值方法33(getter)使用get開頭,其它類型的不能使用。35.對于設置值的方法(setter)使用33set開頭,其它類型的不能使用。3436.方法需要有同樣數量參數的注釋@param。3437.不要在注釋中使用不支持的標記,如:@unsupported。38.不要使用Runtime.exec()方法。343439.不要自定義本地方法(nativemethod)。40.使用盡量簡潔的的運算符號。3441.使用集合時設置初始容量。3442.單個首字符的比較使用charAt()34而不用startsWith()。3443.對于被除數或者被乘數為2的n次方的乘除運算使用移位運算符>>,<<。3444.一個字符的連接使用‘’而不使用“”,如:Stringa=b+'c'。3445.不要在循環體內調用同步方法和使用try-catch塊。46.不要使用不必要的布爾值比較,如:34if(a.equals(b)),而不是if(a.equals(b)==true)。47.常量字符串使用String,非常量34字符串使用StringBuffer。VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X3448.在循環條件判斷的時候不要使用復雜的表達式。49.對于“if(condition)do1;else34do2;”語句使用條件操作符“if(condition)?do1:do2;”。50.不要在循環體內定義變量。3451.使用StringBuffer的時候設置初始34容量。52.盡可能的使用局部變量進行運算。343453.盡可能少的使用‘!’操作符。(5級)3454.盡可能的對接口進行instanceof運算。(5級)3455.不要使用Date[]而要使用long[]替代。56.不要顯式調用finalize()。343457.不要使用靜態集合,其內存占用增長沒有邊界。3458.不要重復調用一個方法獲取對象,使用局部變量重用對象。59.線程同步中,使用notifyAll()代34替notify()。3460.避免在同步方法中調用另一個同步方法造成的死鎖。3461.非同步方法中不能調用wait(),notify()方法。62.使用wait(),notify()代替34while(),sleep()。3463.不要使用同步方法,使用同步塊。(5級)64.把所有的公有方法定義為同步方34法。(5級)3465.實現的Runnable.run()方法必須是同步方法。(5級)66.一個只有abstract方法、final34static屬性的類應該定義成接口。67.在clone()方法中應該而且必須34使用super.clone()而不是new。VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X68.常量必須定義為final。3469.在for循環中提供終止條件。343470.在for,while循環中使用增量計數。71.使用StringTokenizer代替34indexOf()和substring()。72.不要在構建器中使用非final方34法。73.不要對參數進行賦值操作。(5級)3574.不要通過名字比較兩個對象的類,35應該使用getClass()。75.安全:盡量不要使用內部類。3576.安全:盡量不要使類可以克隆。3577.安全:盡量不要使接口可以序列化。3578.安全:盡量不要使用友好方法、屬35性和類。3579.Servlet:不要使用java.beans.Beans.instantiate()方法。3580.Servlet:不再使用HttpSession時,應該盡早使用invalidate()方法釋放。3581.Servlet:不再使用JDBC資源時,應該盡早使用close()方法釋放。82.Servlet:不要使用Servlet的35SingleThreadModel,會消耗大量資源。3583.國際化:不要使用一個字符進行邏輯操作,使用Characater。84.國際化:不要進行字符串連接操作,35使用MessageFormat。85.國際化:不要使用35Date.toString(),Time.toString()方法。3586.國際化:字符和字符串常量應該放在資源文件中。VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X87.國際化:不要使用數字的35toString()方法。3588.國際化:不要使用StringBuffer,StringTokenizer類。89.國際化:不要使用String類的35compareTo(),equals()方法。90.復雜度:建議的最大規模:351參考文獻36VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.X前言本規范是參考公司的《軟件編程規范總則》和SUN公司《JavaCodingStyleGuide》結合而成的Java語言編程規范。本規范沒有涉及到的相關部分,請參見《軟件編程規范總則》。本規范由OMC與網管研究管理部,智能業務研究管理部提出。本規范主要起草和解釋部門:OMC與網管研究管理部,智能業務研究管理部本規范主要起草人:易雄志,張晉,李大偉,傅貴,童志剛,望岳本規范主要審核人:本規范批準人:本規范規范所替代的歷次修訂情況和修訂人為:智能業務部對本規范的以下方面進行了補充和完善:1、排版規范,2、注釋規范,3、命名規范,4、編碼規范,5、JTEST規范。并且按照最新模版進行重新排版。VVVVVVVVVVVVVVVVVVX。XVX.XVX.XVX.XVX.XVX.XJava語言編程規范1范圍本規范規定了使用Java語言編程時排版、注釋、命名、編碼和JTEST的規則和建議。本規范適用于使用Java語言編程的部門和產品。2規范性引用文件下列文件中的條款通過本規范的引用而成為本規范的條款。凡是注日期的引用文件,其隨后所有的修改單(不包括勘誤的內容)或修訂版均不適用于本規范,然而,鼓勵根據本規范達成協議的各方研究是否可使用這些文件的最新版本。凡是不注日期的引用文件,其最新版本適用于本規范。序號編號名稱1公司-0000《軟件編程規范總則》同總則的部分使用*號2公司-DKBA200106-003《Java語言編程規范》1術語和定義規則:編程時強制必須

溫馨提示

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

評論

0/150

提交評論