培訓(xùn)系統(tǒng)代碼_第1頁
培訓(xùn)系統(tǒng)代碼_第2頁
培訓(xùn)系統(tǒng)代碼_第3頁
培訓(xùn)系統(tǒng)代碼_第4頁
培訓(xùn)系統(tǒng)代碼_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、1. 規(guī)范正文1.1. SP1排版規(guī)則1.1.1. SP1.1文件結(jié)構(gòu)Java文件按如下順序組織各元素:表1 文件結(jié)構(gòu)表1.1.2. SP1.2縮進使用4個連續(xù)空格,不要使用tab鍵縮進。1.1.3. SP1.3頁寬頁寬建議設(shè)置為80個字符, 源代碼不要超過這個寬度,以免導(dǎo)致無法完整顯示,超長的語句應(yīng)在一個逗號或者一個操作符后折行; 一條語句折行后, 應(yīng)縮進4個空格。1.1.4. SP1.4操作符操作符左右各用一個空格分隔?!臼纠浚?.1.5. SP1.5換行類定義或方法定義過長需要換行書寫,【示例】:public class CounterSet extends Observable im

2、plements Cloneableprivate PortletSet getPortlets( Portlets portlets,RunData rundata,application, applicationsOnly )/Bodya = b; if (a 0);序號元素說明1排版規(guī)則編碼規(guī)范中排版規(guī)則說明2源代碼編寫規(guī)則包括注釋規(guī)則、命名規(guī)則3單元測試規(guī)則單元測試需要遵循此部分規(guī)則4開發(fā)實踐規(guī)則1.1.6. SP1.6main 方法位置main 方法:main(String) 方法寫在類的底部。1.1.7. SP1.7類的位置類編寫在類的底部,不要編寫在方法的。1.1.8. SP1.

3、8導(dǎo)入包規(guī)則刪除未類,避免使用以“.*”結(jié)尾的,順序如下:1)jdk標準包(例如:import java.io.IOException等)2)第的包(例如:import.dom4j.Node等)3)項目的公共包1.1.9. SP1.9代碼塊書寫風(fēng)格程序中采用下面的書寫方式:【示例】: if (true)/bodyswitch (key) case :1break; default:break; 循環(huán)語句樣式for(i = 0; i+; i 10)/bodydo/body(while(condition)if (true) /body ,即不允許 和代碼體處于同一行。1.2. SP2源代碼編寫規(guī)

4、則1.2.1. SP2.1注釋規(guī)則1.2.1.1. SP2.1.1源文件注釋所有的程序文件應(yīng)該以注釋開始,在注釋中列出系統(tǒng)名稱,模塊名稱,版本信息,更改日期,以及等?!臼纠浚簩Τ绦蛴行薷臅r,必須在源文件中添加修改歷史和修改原因,同時,在提交到版本控制工具中時要寫明注釋。注:版本修訂信息可根據(jù)實際情況來選擇是否添加,不做硬性要求。1.2.1.2. SP2.1.2通用注釋規(guī)則1)注釋內(nèi)容能夠被jdk的 javadoc工具自動提取(不包括方法體內(nèi)注釋)。2)塊注釋的開頭以第一個*號對齊?!臼纠浚?.2.1.3. SP2.1.3類注釋格式:塊注釋,多行【示例】:/*第一行*第二行*/*第一行*第二

5、行*/public sic String content = null;/*/系統(tǒng)名稱:/模塊名稱:/版本信息:/版本日期作者備注/1.02009/02/20新建/1.12009/02/21修改某方法/*while(condition)/body位置:類語句前內(nèi)容:描寫類功能描述,主要算法邏輯、類的應(yīng)用場景,各部分之間的關(guān)系、該類與其它類的關(guān)系等,類調(diào)用示例。其他:注釋中的標記種類沒有強制要求【示例】:1.2.1.4. SP2.1.4類變量注釋格式:塊注釋,多行【示例】:位置:變量語句前內(nèi)容:變量的含義要求:1)public變量的格式和內(nèi)容,必須按此規(guī)則,private的變量不做要求2)pub

6、lic 注釋內(nèi)容,可以通過Javadoc命令生成幫助文檔【示例】:1.2.1.5. SP2.1.5類成員變量注釋/*待拆分字符串*/public sic String content = null;/*第一行*第二行*/*概述:*OSGi規(guī)范中Bundle的激活器*功能:*dm本身既是一個Bundle,又是其他基于這種技術(shù)的動態(tài)模塊的引擎。*see Deployer*see WebDelegate 實例化途徑:* 該類由OSGi框架實例化并調(diào)用相應(yīng)的方法*/public final clasivator implements BundleActivator 同類變量注釋規(guī)則。1.2.1.6.

7、SP2.1.6類方法注釋格式:塊注釋,多行【示例】:位置:在方法前內(nèi)容:描述輸入、輸出及返回值,其中返回值說明要詳細,包括返回的類型,方法執(zhí)行成功返回類型,方法執(zhí)行失敗返回類型,如果返回值是集合,還明集合中每個元素類型。要求:1)public方法的格式和內(nèi)容,必須遵從此規(guī)則,private的方法不做要求。2)public 注釋內(nèi)容,可以通過Javadoc命令生成幫助文檔?!臼纠浚?.2.1.7. SP2.1.7類成員方法注釋同類方法注釋。1.2.1.8. SP2.1.8方法注釋范圍:關(guān)鍵變量和語句需要加注釋。格式:塊注釋,或行注釋。依實際情況確定。位置:變量或者語句的上面?!臼纠浚鹤⑨?:

8、/*第一行*第二行*/*查找SilverStream安裝路徑*pararam1 參數(shù)1*pararam2 參數(shù)2*return String 文件路徑例如 c:SilverStream20*/public sic String searchInstallPath(String param1, String param2)/*第一行*第二行*/注釋2 :1.2.1.9. SP2.1.9注釋行量要求代碼注釋量不得低于文件總行數(shù)的30%。非代碼注釋量不得低于文件總行數(shù)的20%。1.2.2. SP2.2命名規(guī)則1.2.2.1. SP2.2.1package名規(guī)則:名字由一個小寫單詞組成,參見Java

9、specification 規(guī)范要求。定義:包名:=com.sgcc.項目英文縮寫/cbb.組件英文縮寫.子包名com:= 常量,表示商業(yè)。sgcc:= 常量,表示國家電網(wǎng)公司。項目英文縮寫 := 在項目立項書中定義的項目英文縮寫名稱。組件英文縮寫 := 在設(shè)計文檔中定義的組件英文縮寫名稱。子包名由項目組自行定義。注意:如果是公共組件開發(fā),需要寫組件英文縮寫?!臼纠浚?.2.2.2. SP2.2.2class 命名規(guī)則:首字母必須大寫、必須用名詞,參見Java specification規(guī)范要求?!臼纠浚?.2.2.3. SP2.2.3erface 命名規(guī)則:接口以I開頭,后面寫接口名,如

10、:【示例】:1.2.2.4. SP2.2.4變量命名【示例】:規(guī)則:變量名稱是代表業(yè)務(wù)英文的拼寫或縮寫,首字母一定要用小寫。其后單詞的首字母大寫?;绢愋妥兞扛袷剑簲?shù)據(jù)類型首字母 + 代表業(yè)務(wù)英文的拼寫或縮寫。publicerface IPortletpublic class FileInputStreammon/待拆分字符串private String content = null;private String content = null;對象類型變量格式:對象名稱首字母小寫復(fù)合型變量格式:對象名稱 + 集合類型縮寫1.2.2.5. SP2.2.4常量命名規(guī)則:程序的常量名應(yīng)該都使用大寫字

11、母,并且該常量完整含義。如果一個常量名稱由多個單詞組成,則應(yīng)該用下劃線來分割這些單詞?!臼纠浚?.2.2.6. SP2.2.5方法命名規(guī)則:方法應(yīng)以動詞開頭,首寫字母小寫。增加:save,刪除:delete,修改:update,查詢:find/query?!臼纠浚?.2.2.7. SP2.2.6數(shù)據(jù)庫包命名規(guī)則:PKG_開頭?!臼纠浚?.2.2.8. SP2.2.7數(shù)據(jù)庫規(guī)則:PRC_開頭?!臼纠浚哼^程命名1.2.2.9. SP2.2.8數(shù)據(jù)庫函數(shù)命名規(guī)則:FNC_開頭?!臼纠浚?.2.2.10.SP2.2.9數(shù)據(jù)庫觸發(fā)器命名規(guī)則:TRG_開頭,后續(xù)名稱要求能清晰表明觸發(fā)點、觸為及觸

12、名,觸發(fā)點分為表操作前(BEFORE)和表操作后(AFTER),分別用字母B、A表示;觸為分為INSERT、UPDATE、DELETE,分別用字母I、U、D表示?!臼纠浚?.2.2.11.SP2.2.10數(shù)據(jù)庫變量&游標命名變量名符合v_X格式,其中是與變量意義相關(guān)的意義名稱;TRG_BIUD_PM_PRJECT_INFOFNC_QUERY_PRJ_COUNTPRC_SAVE_PRJPKG_PROJECTsaveUserInfo();public sic final String FUNC_ROLE_GROUP_ID = “0”;private String sMaxValue = null

13、; iTotal = 0;ListVoList = null;MapPoMap = null; ObjectObj = null;過程、函數(shù)傳入?yún)?shù)變量量意義相關(guān)的意義名稱;名符合p_X格式,其中是與參數(shù)變游標變量名稱;變量名稱長度名符合cur_X格式,其中是與游標變量意義相關(guān)的意義過30個字符,不能采用關(guān)鍵字,以字母開頭。1.2.2.12.SP2.2.11數(shù)據(jù)庫表命名按專業(yè)縮寫開頭,項目管理PM_,安全管理SM_,質(zhì)量管理QM_,技術(shù)管理TM_,造價管理CM_,系統(tǒng)通用T_SYS_。1.3.SP3單元測試規(guī)則1.3.1. SP3.1原則1.3.1.1. SP3.1.1基本要求每個工程提供一個

14、測試所有TestCase的測試類。程序運行工程的這個測試類時需要保證零個失敗、零個錯誤。圖1 測試類運行結(jié)果圖1.3.1.2. SP3.1.2測試覆蓋率每個工程需要對代碼(包括重要的算法、處理邏輯、大量被調(diào)用的接口等)全面測試覆蓋其有效性。慮到工作量和產(chǎn)出性價比,該規(guī)范建議不用單獨地追求測試覆蓋率,最重要的要求是有效性,對測試覆蓋率不做硬性要求。1.3.2. SP3.2命名規(guī)則1.3.2.1.SP3.2.1testclass 命名規(guī)則:測試類名是在業(yè)務(wù)、接口、類加Test前綴?!臼纠浚?.3.2.2.SP3.2.2 testcase 命名規(guī)則:測試用例名規(guī)則是test+用例操作_狀態(tài)?!臼纠?/p>

15、】:1.3.2.3.SP3.2.3 testpackage 命名規(guī)則:測試程序包名規(guī)則是在包名前加Test前綴?!臼纠浚簃on 如montestSetMobiind如 testSetMobiind_NoSkyidFileInputStream如 TestFileInputStream1.3.2.4.SP3.2.4變量命名同 源代碼編碼變量命名規(guī)則。1.3.2.5.SP3.2.5常量命名同源代碼編碼常量命名規(guī)則。1.4. SP4開發(fā)實踐規(guī)則1.4.1. SP4.1資源處理規(guī)則如果使用有限資源(如數(shù)據(jù)庫連接、文件流等)的實例作為方法參數(shù),方法中不要關(guān)閉這些資源實例;如果方法中創(chuàng)建了資源實例,必須

16、在本方法中關(guān)閉,關(guān)閉位置放在finally子句里。1.4.2. SP4.2異常處理規(guī)則1.4.2.1. SP4.2.1拋棄/異常異常捕獲后,不處理,如下:1.4.2.2. SP4.2.2截斷異常堆棧異常捕獲后,對異常轉(zhuǎn)譯,原始異常的堆棧不拋出,如下:1.4.2.3. SP4.2.3異常轉(zhuǎn)譯異常捕獲后,對異常轉(zhuǎn)譯,原始異常按異常鏈的方式拋出,如下:try catch NullPoerException e/ 捕獲下層方法拋出的異常/ 將異常信息日志log.debug(“object is null.”);/ 將捕獲后的異常,轉(zhuǎn)譯為新的異常,拋出。try/nothingcatch NullPoer

17、Exception e/ 捕獲下層方法拋出的異常/ 將異常信息日志log.debug(“object is null.”);/ 將捕獲后的異常,轉(zhuǎn)譯為新的異常,拋出。throw new IllegalArgumentException(“參數(shù)名為type的值為空?!?)trycatch XXException e/nothing1.4.3. SP4.3重寫/調(diào)用的方法1) exit()exit() 除了在main 中可以被調(diào)用外,其他的地方調(diào)用。2) System.gc()收集方法,在程序中調(diào)用。3) Object.無效。()錯誤!超對象實例方法,重寫或調(diào)用。1.4.4. SP4.4數(shù)據(jù)庫連接

18、的獲得使用JNDI方式或其他的數(shù)據(jù)庫連接池的方式,使用JDBC的方式:1.4.5. SP4.5代碼性能1)在循環(huán)體中并實例化變量在循環(huán)體中并實例化臨時變量將會增加內(nèi)存消耗,增加回收次數(shù);尤其的大對象,嚴格在循環(huán)并實例化。例如:應(yīng)該在循環(huán)體外變量,在循環(huán)體內(nèi)實例化變量,如下:import java.util.Vector; public class LOOP void method (Vector v) Object o;for (i = 0;i v.size();i+) o = v.elemen(i);import java.util.Vector; public class LOOP voi

19、d method (Vector v) for (i = 0;i v.size();i+) Object o = new Object(); / 不建議 o = v.elemen(i);假設(shè)數(shù)據(jù)源名稱為:jdbc/myoracleContext initContext = new InitialContext();Context envContext= (Context)initContext.lookup(p/env); DataSource ds = (DataSource)envContext.lookup(jdbc/myoracle); Connection conn = ds.get

20、Connection();throw new IllegalArgumentException(“參數(shù)名為type的值為空?!?, e )2)在循環(huán)中調(diào)用synchronized(同步)方法方法的同步需要消耗相當(dāng)大的資源,不要再循環(huán)中調(diào)用同步方法:建議在同步塊中,調(diào)用非同步方法。3) 建議多使用局部變量調(diào)用方法時傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時變量都保存在棧(Stack)中,速度較快。其他變量,如實例變量等,都在堆(Heap)中創(chuàng)建,速度較慢。4) 建議使用System.arraycopy ()代替通過來循環(huán)數(shù)組System.arraycopy () 要比通過循環(huán)來數(shù)組快的多。例如:publi

21、c class IRBvoid method () array1 = new100;for (i = 0; i array1.length; i+) import java.util.Vector; public class SYN public void method (Object o) private void test () synchronized/在一個同步塊中執(zhí)行非同步方法for (i = 0; i vector.size(); i+) method (vector.elemen(i);private Vector vector = new Vector (5, 5);impor

22、t java.util.Vector; public class SYN public synchronized void method (Object o) private void test () for (i = 0; i vector.size(); i+) method (vector.elemen(i);/ violationprivate Vector vector = new Vector (5, 5);5)在循環(huán)中使用Try/Catch語句,應(yīng)把Try/Catch放在循環(huán)最外層把try/catch塊放入循環(huán)體內(nèi),會極大的影響性能,如果編譯JIT被關(guān)閉或者你所使用的是一個不帶J

23、IT的JVM,性能會將下降很多。6) 異常只能用于錯誤處理,用來控制程序流程,影響性能拋出異常首先要創(chuàng)建一個新的對象。Throwable接口的構(gòu)造函數(shù)調(diào)用名為fillInStackTrace()的本地方法,fillInStackTrace()方法檢查棧,收集調(diào)用跟蹤信息。7) 建議使用StringBuffer或StringBuilder實現(xiàn)字符串連接“+”建議使用StringBuffer或StringBuilder代替“+”連接符,實現(xiàn)字符串連接操作。StringBuffer為線程安全的。單線程環(huán)境下, StringBuilder性能高于StringBuffer。8) 建議使用StringBu

24、ffer對象時,設(shè)置初始大小StringBuffer機制使用數(shù)組實現(xiàn)。StringBuffer的默認容量為16,當(dāng)StringBuffer的容量達到最大容量時,將自身容量增加到當(dāng)前的2倍+2,也就是2*n+2;JVM創(chuàng)建一個新的對象數(shù)組,然后舊的對象數(shù)組到新數(shù)組中。9) Vector對象使用方法Vector與StringBuffer類似,每次擴展容量時,所有現(xiàn)有元素都要賦值到新的空間中。Vector的默認能力為10個元素,擴容加倍。vector.add(index,obj) 這個方法可以將元素obj到index位置,但index以及之后的元素依次都要向下移動一個位置(將其索引加 1)。除非必要

25、,否則對性能不利。同樣規(guī)則適用于remove(index)方法,移除此向量中指定位置的元素。將所有后續(xù)元素將其索引減 1)。返回此向量中移除的元素。所以刪除vector最后一個元素要比刪除第1個元素開銷低很多。刪除所有元素最好用removeAllElements() 方法。如果要刪除vector 里的一個元素可以使用array1 i = i; array2 = new100; System.arraycopy(array1, 0, array2, 0, 100);vector.remove(obj);而不必自己檢索元素位置,再刪除,如index =indexOf(obj);vector.rem

26、ove(index)。10)不建議在循環(huán)中使用表達式在不做編譯優(yōu)化的情況下,在循環(huán)中,循環(huán)條件會被反復(fù)計算,如果不使用復(fù)雜表達式,而使循環(huán)條件值不變的話,程序?qū)\行的更快。建議改為:11)單線程使用的集合類型單線程下使用 HashMap, ArrayList,不HashTable和Vector;后者是線程安全的,性能比前者低。12)array(數(shù)組)和ArrayList的使用array 數(shù)組效率最高,但容量固定,無法動態(tài)改變,ArrayList容量可以動態(tài)增長,但犧牲了效率。13)輸入和輸出(I/O)盡可能的多使用緩存,注意使用緩存和不使用緩沖,在讀寫硬盤文件時,性能差別很大。但如果要經(jīng)常對

27、緩存進行刷新(flush),則建議不要使用緩存。14)對象序列化和transient類型當(dāng)序列化一個類或?qū)ο髸r,對于那些原子類型(atomic)或可以重建的原素要表識為transient類型。這樣就不用每一次都進行序列化。尤其是序列化的對象需要在網(wǎng)絡(luò)上傳輸?shù)那闆r。15)數(shù)據(jù)字典的用法class CEL_fixed void method (Vector vector) size = vector.size ()for (i = 0; i size; i+); / .import java.util.Vector; class CEL void method (Vector vector) for (i = 0; i vector.size (); i+)/ Violation; / .

溫馨提示

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

評論

0/150

提交評論