開發(fā)編碼規(guī)范_第1頁
開發(fā)編碼規(guī)范_第2頁
開發(fā)編碼規(guī)范_第3頁
開發(fā)編碼規(guī)范_第4頁
開發(fā)編碼規(guī)范_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、JAVA編碼規(guī)范vl.O目錄1. 關于32. 項目結構32.1 命名空間32.2 源文件32.3 文件目錄存放33. 命名約定44. 排版55. Java文件格式66. 注釋規(guī)范67. 代碼編譯88. 性能89. 測試及維護910. 異常911. 編程技巧101) )使用StringBuffer對象102) 避免太多的使用synchronized關鍵字103) 避免使用java.util.Vector類104) )面向接口編程105) 避免使用索引來調用數(shù)據(jù)庫中間層組件返回的結果集116) 對于自己創(chuàng)建的每一個類,都考慮置入一個main()117) 應將方法設計成簡要的、功能性單元118) )

2、設計一個類時,請設身處地為客戶程序員考慮一下119) 使類盡可能短小精悍,而且只解決一個特定的問題。1210) 采用內部類1211) )采用注釋1212) 避免使用"魔術數(shù)字"1213) 接口和抽象類的使用1214) )日志調試1312. JSP編碼規(guī)范1313. 日志框架1414. 事務處理161. 關于本文檔以JAVA編程語言為基礎,提供編碼規(guī)范的指導,以統(tǒng)一開發(fā)人員的書寫標準,提高代碼的可讀性。代碼體系、接口規(guī)約、命名規(guī)則等,這是項目小組今后共同作戰(zhàn)的基礎,有了編碼規(guī)范和程序模塊之間和項目成員彼此之間的接口規(guī)則、方式方法,大家就有了共同的工作語言、共同的工作平臺,使整

3、個軟件開發(fā)工作可以協(xié)調有序地進行。2. 項目結構2.1 命名空間每個命名空間對應一個目錄。采用完整的英文描述符,應該都是由小寫字母組成。對于全局,將你的Internet域名反轉并接上包名如java.awt,com.ambysoft.www.persistenee。全局命名空間下的其它則按照功能進行劃分,每個功能包下則按照放置的不同文件性質進行設置。2.2 源文件以類名作為文件名。一個文件只應該有一個命名空間,避免將多個類或命名空間放在同一個文件里面:一個文件除去IDE產(chǎn)生的代碼后最好不要超過500行的代碼,一個方法的代碼長度最好不要超過25行,超出后應考慮拆分代碼或重構以降低耦合;每行代碼不要

4、超過80個字符;避免方法中有超過5個參數(shù)的情況。如果超過了,則應將參數(shù)封裝為類或集合類型進行傳遞。2.3 文件目錄存放JSP存放目錄按子系統(tǒng)存放,同一子系統(tǒng)中的JSP文件不再分設單獨的目錄。圖片存放目錄為”/images”,JS文件存放目錄為:專用的JS文件和jsp文件在同一目錄下,公用的放在”/js”下;所有的樣式表都存放在”/css”下;子系統(tǒng)目錄采用完整的英文描述說明,第一個單詞的首字母小寫,其他單詞首字母大寫3. 命名約定命名方式使用匈牙利表示法,命名時應始終采用完整的英文描述符,一般應采用小寫字母。命名規(guī)則1 )包的命名包的命名一般都有小寫字母組成。如packagecom.util2

5、 )類的命名類的名字必須由大寫字母開頭而其他字母都小寫的單詞組成,其中包含的所有單詞都應緊靠在一起,而且大寫中間單詞的首字母。如PublicclassUserService3)類的變量命名變量的名字必須由一個小寫字母開頭,后面的單詞用大寫字母開頭。如userName4)靜態(tài)變量的命名靜態(tài)變量的名字應該都大寫,并且指出完整含義。如publicstaticfinalStringLOG_CONFIG=”W-INEBF/Lperties”5)參數(shù)的命名參數(shù)的名字必須和變量的命名規(guī)范一致。6)數(shù)組的命名數(shù)組應該總是用下面的方式來命名。bytebuffer;而不是bytebuffer;7)

6、方法的參數(shù)使用有意義的參數(shù)命名,如果可能的話,使用和要賦值的字段一樣的名4?排版換行1 )較長的語句、表達式要等分成多行書寫。2 )長表達式要在低優(yōu)先級操作符處劃分新行,操作符放在新行之首。3 )循環(huán)、判斷等語句中若有較長的表達式或語句,則要進行適當?shù)膭澐帧? )若函數(shù)中的參數(shù)較長,則要進行適當?shù)膭澐帧? )不允許把多個短語句寫在一行中,即一行只寫一句語句??s進和間隔縮進應該是每行2個空格。不要在源文件中保存Tab字符,在使用不同的源代碼管理工具時Tab字符將因為用戶設置的不同而擴展為不同的寬度。1 )關鍵詞和操作符之間加適當?shù)目崭瘛? )相對獨立的程序塊與塊之間加空行。3 )函數(shù)或過程的開始

7、、結構的定義及循環(huán)、判斷等語句中的代碼都要采用縮進風格。'和'應各獨占一行并位于同一列,同時與引用它們的語句左對齊。4 )劃分出的新行要進行適應的縮進,使排版整齊,語句可讀。5) 可以使用IDE工具中的格式化功能進行代碼的排版。如Eclipse中,CTRL+SHIFT+F代碼片段1 )避免使用不易理解的數(shù)字,用有意義的表示來替代。2 )不要使用難懂的技巧性很高的語句。3)遠程中關聯(lián)較為緊密的代碼應盡可能相鄰。4)編寫完成后,檢查代碼,將代碼中沒有使用的各類引用包刪除,程序的有效、完整性。5. Java文件格式所有的Java文件都必須遵守如下的樣式規(guī)則。1 )版權信息2 )Pac

8、kage/lmports3 )類的注釋4 )類屬性5 )存取方法6 )構造函數(shù)7 )類方法8 )main方法6. 注釋規(guī)范1 )注釋要簡單明了。Stringusername=null;/用戶2 )編寫代碼邊注釋,修改代碼同時修改相應的注釋,以保證注釋和代碼的致性。3 )在必要的地方注釋,注釋量要適中。注釋的內容要清楚、明了、含義準確,防止注釋二義性。保持注釋與其描述的代碼相鄰,即注釋的就近原則。4 )對代碼的注釋應放在其上方相鄰位置,不可放在下面。對數(shù)據(jù)結構的注應放在其上方相鄰位置,不可放在下面;對結構中的每個域的注釋應放在右方;統(tǒng)一結構中不同域的注釋要對齊。保持釋此域的5 )變量、常量的注釋

9、應該放在其上方相鄰位置或右方。6 )全局變量要有較詳細的注釋,包括對其功能、功能范圍、那些函數(shù)或過程存取它以及存取時注意事項等的說明。7 )在每個源文件的頭部要有必要的注釋信息,包括:作者;生成日期;模塊功能描述;文件歷史修改記錄等。/* 預警監(jiān)控明細納稅人信息指標* 業(yè)務規(guī)則說明:*authorxx* /8)在每個函數(shù)或過程的前面要有必要的注釋信息。包括:功能描述;輸入、輸出及返回值說明;* 返回預警明細信息字符串* paramyjxxID預警信息ID* paramyjzbID預警指標ID* return* throwsServiceException*/9)javadoc注釋標簽語法。pa

10、ram對方法中參數(shù)的說明return對方法返回值的說明author表明開發(fā)此類的作者7?代碼編譯編寫代碼時要注意隨時保存,并定期備份,防止由于斷電、磁盤損壞等原因造成代碼丟失。同一項目組內,最好使用相同的編輯器,并使用相同的設置選項。合理的設計軟件系統(tǒng)目錄,方便開發(fā)人員使用。打開編譯器的所有告警開發(fā)對程序進行編譯。搭建必要的CVS或SVN項目組開發(fā)人員可以及時的上傳、更新項目程序代碼,保證代碼的一致性。代碼編譯之前,需修改程序的參數(shù),以適應不同的環(huán)境,如日志的級別、數(shù)據(jù)庫的連接方式在測試環(huán)境和生產(chǎn)環(huán)境都是不同的。8?性能寫代碼的時候,一定要考慮性能問題,在完成功能的同時也要保證所寫代碼的執(zhí)行效

11、率。如果沒有時間來實現(xiàn)一個高效的算法,那么我們應該在文檔中記錄下來,以便在以后有空的時候再來實現(xiàn)。不必要的對象構造,不要在循環(huán)中構造和釋放對象,使用StringBuffer對象。在進行文件的讀取操作,除了可以正常的捕捉異常外,必須在文件讀取完畢后,關閉整個流,特別是在系統(tǒng)發(fā)生異常時也要保證相關流操作能夠正常關閉。在進行數(shù)據(jù)庫的讀寫操作中,在完成操作后,務必要關閉對數(shù)據(jù)庫的連接,特別是在系統(tǒng)發(fā)生異常時也要保證數(shù)據(jù)庫的連接能夠正常關閉。在代碼編寫的過程中,盡量減少方法中臨時變量以及類中全局靜態(tài)變量的使用,這些變量都將增加系統(tǒng)的額外開銷。在進行數(shù)據(jù)庫編程中,數(shù)據(jù)的提取、更新、刪除這些都需要優(yōu)化相應的

12、語句。特別是對于大量數(shù)據(jù)使用時,語句的優(yōu)化相當重要。9. 測試及維護單元測試要求至少達到語句覆蓋。編寫測試用例,將用到的各種情況都考慮進去,保證測試的全面及測試結果的準確性。單元測試開始要跟蹤每一條語句,并觀察數(shù)據(jù)流及流量的變化。清理、整理或優(yōu)化后的代碼要經(jīng)過審核及測試。代碼版本升級要經(jīng)過嚴格測試。系統(tǒng)開發(fā)中可以將已完成的功能交由用戶進行使用,可以從不同的角度收集功能測試信息。系統(tǒng)交付客戶使用之前,一定要經(jīng)過壓力測試,保證程序并發(fā)運行時達到要求的性能。10. 異常在系統(tǒng)運行過程中,不論是系統(tǒng)本身的錯誤,還是由于用戶的非法操作導致的錯誤,系統(tǒng)能夠正確的捕捉,且能及時的響應客戶,這是評價程序優(yōu)劣很

13、重要的方面。因此需要程序捕捉特定的異常,并給出友好的消息給用戶,并記錄錯誤的所有可能細節(jié),包括發(fā)生的時間,和相關方法,類名等。不必每個方法都用try-catch,當特定的異??赡馨l(fā)生時才使用。比如,當寫文件時,處理異常FilelOException,不要寫太大的try-catch模塊。如果需要,為每個執(zhí)行的任務編寫單獨的try-catch模塊。如果應用程序需要,可以編寫自己的異常類。自定義異常應從System.Exception或System.RuntimeException派生。11. 編程技巧1 )使用StringBuffer對象在處理String的時候要盡量使用StringBuffer類

14、,StringBuffer類是構成String類的基礎。String類將StringBuffer類封裝了起來,為開發(fā)人員提供了一個安全的接口。當我們在構造字符串的時候,我們應該用StringBuffer來實現(xiàn)大部分的工作,當工作完成后將StringBuffer對象再轉換為需要的String對象。比如:如果有一個字符串必須不斷地在其后添加許多字符來完成構造,那么我們應該使用StringBuffer對象和它的即pend()方法。如果我們用String對象代替StringBuffer對象的話,會花費許多不必要的創(chuàng)建和釋放對象的CPU時間。2 )避免太多的使用synchronized關鍵字避免不必要的

15、使用關鍵字synchronized,應該在必要的時候再使用它,這是一個避免死鎖的好方法。必須使用時,也盡量控制范圍,最好在塊級控制。3 )避免使用java.util.Vector類因為此類屬于單線程,所以使用它操作大量數(shù)據(jù)時,在性能上會有很大的損失。4 )面向接口編程在程序的開發(fā)中,建議盡可能的采用面向接口進行編程,即系統(tǒng)業(yè)務方法都必須繼承自相應的接口。系統(tǒng)間的方法調用也是通過接口而非具體實現(xiàn)類完成,期間如果業(yè)務方法發(fā)生變化或者系統(tǒng)應用環(huán)境發(fā)生變化,則采用新的方法實現(xiàn)已定義的接口,替換以前的實現(xiàn)即可,而無需修改已有的代碼??傊褪且獙π薷姆忾],對擴展開放。比方如下需求,給定一個SQL語句,返回

16、一個對象的列表,實現(xiàn)中用java.util.ArrayList實現(xiàn),于是定義方法為:publicjava.util.ArrayListgetObjectltems(Stringsql)上面的方法存在一個問題,當getObjectItems內改用Vector或LinkedList實現(xiàn),外部類必須做相應更改。一個更好的方法是定義返回值為java.util.AbstractList更合適:publicjava.util.AbstractListgetObjectltems(Stringsql)這樣即使更改實現(xiàn),外部類也不必做相應更改。5 )避免使用索引來調用數(shù)據(jù)庫中間層組件返回的結果集如:for(i

17、nti=1;i<=dt.getRowCount();i+)Stringfield1=dt.getField(i,0).toString();而應用字段名來存取結果集:for(inti=1;i<=dt.getRowCount();i+)Stringfield1=dt.getField(i,"field1").toString();這樣在數(shù)據(jù)庫設計更改或查詢的SQL語句發(fā)生變化時,不會影響到程序的執(zhí)行。6 )對于自己創(chuàng)建的每一個類,都考慮置入一個main()其中包含了用于測試那個類的代碼。為使用一個項目中的類,我們沒必要刪除測試代碼。若進行了任何形式的改動,可方便地

18、返回測試。這些代碼也可作為如何使用類的一個示例使用。7 )應將方法設計成簡要的、功能性單元用它描述和實現(xiàn)一個不連續(xù)的類接口部分。理想情況下,方法應簡明扼要。若長度很大,可考慮通過某種方式將其分割成較短的幾個方法。這樣做也便于類內代碼的重復使用(有些時候,方法必須非常大,但它們仍應只做同樣的一件事情)。8 )設計一個類時,請設身處地為客戶程序員考慮一下(類的使用方法應該是非常明確的)。然后,再設身處地為管理代碼的人考慮一下(預計有可能進行哪些形式的修改,想想用什么方法可把它們變得更簡單)。9 )使類盡可能短小精悍,而且只解決一個特定的問題。下面是對類設計的一些建議:一個復雜的開關語句:考慮采用&

19、quot;多形"機制;數(shù)量眾多的方法涉及到類型差別極大的操作:考慮用幾個類來分別實現(xiàn);許多成員變量在特征上有很大的差別:考慮使用幾個類。10 )采用內部類任何時候只要發(fā)現(xiàn)類與類之間結合得非常緊密,就需要考慮是否采用內部類,從而改善編碼及維護工作。11 )采用注釋盡可能細致地加上注釋,并用javadoc注釋文檔語法生成自己的程序文檔。12 )避免使用"魔術數(shù)字"這些數(shù)字很難與代碼很好地配合。如以后需要修改它,無疑會成為一場噩夢.因為根本不知道"100"到底是指"數(shù)組大小"還是"其他全然不同的東西"。所以,我

20、們應創(chuàng)建一個常數(shù),并為其使用具有說服力的描述性名稱,并在整個程序中都采用常數(shù)標識符。這樣可使程序更易理解以及更易維護。13 )接口和抽象類的使用接口有如下特點:1. 接口中的方法可以有參數(shù)列表和返回類型,但不能有任何方法體。2. 接口中可以包含字段,但是會被隱式的聲明為static和final。3. 接口中的字段只是被存儲在該接口的靜態(tài)存儲區(qū)域內,而不屬于該接口。4. 接口中的方法可以被聲明為public或不聲明,但結果都會按照public類型處理。5. 當實現(xiàn)一個接口時,需要將被定義的方法聲明為public類型的,否則為默認訪問類型,Java編譯器不允許這種情況。6. 如果沒有實現(xiàn)接口中所有

21、方法,那么創(chuàng)建的仍然是一個接口。7. 擴展一個接口來生成新的接口應使用關鍵字extends,實現(xiàn)一個接口使用implements。接口和抽象類基本類似,具體選擇則依據(jù)以下規(guī)則:1. 如果要創(chuàng)建不帶任何方法定義和成員變量的基類,那么就應該選擇接口而不是抽象類。2. 如果知道某個類應該是基類,那么第一個選擇的應該是讓它成為一個接口,只有在必須要有方法定義和成員變量的時候,才應該選擇抽象類。因為抽象類中允許存在一個或多個被具體實現(xiàn)的方法,只要方法沒有被全部實現(xiàn)該類就仍是抽象類。14) 日志調試盡量減少程序使用System.out.println()向屏幕輸出追蹤的信息,System.out.prin

22、tln()為單線程處理,因此在輸出的時候,程序資源屬于獨占狀態(tài)。采用日志控制進行信息的追蹤,如log.debug,,log.warn不同的級別輸出不同的信息,給用戶帶來的不同的提示。在系統(tǒng)開發(fā)階段將日志級別設置為DEBUG莫式,而在項目運行期則設置為ERR0模式。12. JSP編碼規(guī)范整個JSP表示層應當盡可能的簡單化,牢記大多數(shù)的JSP都應當是用來顯示信息的,具體的數(shù)據(jù)由其他實體提供。在盡可能合理的情況下,把業(yè)務邏輯從JSP中移走。盡量把條件邏輯放在控制器中而不是放在試圖中。采用完整的英文描述命名JSP盡可能包括一個生動的動詞,第一個字母小寫,如viewMessage.jsp

23、,命名要有意義。應當在JSP中避免使用頁面引入命令。Import指令會促使類的實例化而不是JSPbean的實例化:不用:<%pageimport="com.java.util.*">而用:<%java.util.Listl=newjava.util.LinkedList()%>JSP不應該直接去訪問請求參數(shù)。應當有程序可以執(zhí)行這樣的處理過程并且輸出所處理的模型數(shù)據(jù)。應當避免設計既顯示表單又處理結果的頁面。在JSP中避免代碼重復,要把重復的功能放在一個包含的JSP中使得它能夠被重用。在JSP中應當避免使用out.println()方法來產(chǎn)生頁面內容。J

24、SP層不應該直接訪問數(shù)據(jù)。有專門的處理數(shù)據(jù)程序執(zhí)行此功能。應當謹慎地使用<jsp:forward>標記,在JSP中它是一個等價的goto。在JSP中避免進行異常處理,如果沒有充分的理由,不要在JSP中定義方法。13. 日志框架日志主要用來在項目開發(fā)過程中,用以跟蹤關注的各類信息,如執(zhí)行的SQL語句,系統(tǒng)加載的對象等,對開發(fā)人員來說,這是一個有用的輔助工具。在已有項目中采用Log4j作為基本的日志框架。Log4j框架采用Lperties為基礎配置文件,開發(fā)人員可以靈活設置。在程序中,具體的使用方法如下:Loggerlogger=Logger.getLogger(thi

25、s.class);logger.debug();(調試級別)logger.warn();(警告級別)logger.error();(錯誤級別 )logger.i nfo();(正常級別)Servlet 加載和通過Spring 進行Log4j的加載方式有好多,主要介紹兩種,通過加載。1 使用Servlet讀取配置文件,在web容器啟動時自動加載。ServletContextcontext=getServletContext();StringrealPath=context.getRealPath("/");StringlogPath=realPath+/WEB-INF/log

26、4perties"PropertyConfigurator.configure(logPath);2 、使用與Spring結合的方式,在Spring配置文件applicationContext.xml中加入監(jiān)聽配置,在系統(tǒng)加載Spring時,加載Log4j。<context-param>vparam-name>log4jConfigLocation</param-name>vparam-value>/WEB-INF/classes/perties</param-value>v/context-param>

27、;vlistener>vlistener-class>org.springframework.web.util.Log4jConfigListenerv/listener-class>v/listener><servlet>vservlet-name>log4j</servlet-name><servlet-class>org.springframework.web.util.Log4jConfigServletv/servlet-class>vload-on-startup>1</load-on-startu

28、p</servlet>14. 事務處理依據(jù)在現(xiàn)有的項目中使用到的事物處理方式,將事物處理分為以下類型。1 、程序中采用JDBC進行硬編碼,那么其事務的控制,則是通過在代碼中捕捉異常,如果異常發(fā)生,則進行數(shù)據(jù)回滾。通常的操作處理都在trycatchfinally語句塊中。2 、程序中采用框架進行數(shù)據(jù)庫編程。因現(xiàn)有開發(fā)的大部分項目都采用Ibatis作為基本的數(shù)據(jù)庫編程框架。其事務控制完成如下:trysc.startTransaction();具體的數(shù)據(jù)庫操作mitTransaction();sc.endTransaction();catchsc.endTransaction();3 、程序中采用Ibat

溫馨提示

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

評論

0/150

提交評論