Java編程規范參考模板_第1頁
Java編程規范參考模板_第2頁
Java編程規范參考模板_第3頁
Java編程規范參考模板_第4頁
Java編程規范參考模板_第5頁
已閱讀5頁,還剩7頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、Java編碼規范制定本編程格式的目的是為了使軟件可讀性好、兼容性好、易維護等等。注:加(*)者為重要保證要求。一、命名規范1.1 Package 的命名(*)Package 的名字應由一個小寫單詞組成。為了保證包的唯一性,一般以公司國際域名開頭。例如:com.elanbase.db。1.2 Class 的命名(*)Class 的名字必須由大寫字母開頭,并且其它單詞的首寫字母也要大寫。例如:DbAccess。1.3 Class 成員屬性及變量的命名(*)變量/成員屬性的名字用一個小寫字母開頭,后面的單詞以大寫字母開頭。例如:private String lastName;1.4 常量的命名(*)

2、Java 里的常量,是用static final 修飾的,應該用全大寫加下劃線命名,并且常量名應盡量指出完整含義。如:public static final String ORACLE_DB_DRIVER = oracle.jdbc.driver.OracleDriver ;1.5 數組的命名數組應該總是用下面的形式來命名:byte buffs;而不是:byte buffs;1.6 方法的參數和變量的命名規范一致,且應使用有意義的參數命名,如果可能的話,使用和要賦值的1 / 12屬性一樣的名字,如:setCounter(int size)this.size = size;1.7 方法命名(*)

3、用一個小寫字母開頭,后面的單詞以大寫字母開頭。應意義明確,對于屬性的存取方法,應使用getXXX()和setXXX()名稱,以isXXX(),hasXXX()來命名返回值為boolean 類型的方法。1.8 一般命名注意事項a. 用有意義的名字命名變量首先,用完整的英語單詞或約定俗成的簡寫命名變量,鼓勵多用約定俗成的簡寫命名變量。例如:public String zipCodepublic int errNob. 用復數命名Collection 類變量Collection, 包括數組,Vector 等。命名時使用復數:例如:public Collection customers二、Java 源

4、文件樣式Java(*.java) 源文件應遵守如下的樣式規則2.1 Class 代碼布局:package Javadoc 注釋或者其它文件頭注釋類聲明Fields 聲明空行構造函數空行克隆方法空行其它方法(不包括main)空行內部(Inner)類空行main()方法2.2 版權信息版權信息必須在java 文件的開頭,例如:/* * Title:編碼過濾器 * Description: 該類實現把request請求編碼為web.xml文件中所配置的字符集 * Copyright: Copyright (c) 2003 * Company: 蘭貝斯信息科技 * author 曾小平 * versi

5、on 1.0 */ 2.3 Package/Imports(*)package 行要在版權信息之前,中間空一行。將import 的classes 歸類,按順序羅列:a. Java 標準類(java.*)b. Java 擴充類(javax.*)c. 第三方類d. 你的應用程序的類每一類空一行。注意在第三方類里進行注釋,說明它們的來源。如果import 行中包含了同一個包中的多個類,不推薦用import pakage.* 來處理,推薦把要用的類一一import出來。這樣程序用到哪些類就可以非常清楚的看出來,有利于代碼的維護,增強了代碼的可讀性。例如:import java.util.Observa

6、ble;import java.util.Date;import javax.sql.Connection;/Apache Xercesimport org.apache.xml.*;import org.apache.xerces.dom.*;/Application classesimport com.elanbase.db.DbAccess2.4 Class Fields類的成員變量:/* Packet counters*/protected int packets;public 的成員變量必須以生成文檔(JavaDoc)的方式進行注釋(/* */)。protected、private

7、和package 定義的成員變量如果名字含義明確的話,可以沒有注釋。Field 定義可遵從以下順序:a. public 常量b. public 變量c. protected 常量d. protected 變量e. package 常量f. package 變量g. private 常量h. private 變量2.5 存取方法(getter,setter)接下來是類成員變量的存取的方法。2.6 構造方法(*)重載的構造方法應該用遞增的方式寫(參數多的寫在后面)。public CounterSet()this(10);public CounterSet(int size)this.size =

8、size;2.7 克隆方法如果這個類是可以被克隆的,就應實現clone 方法:public Object clone() try CounterSet obj = (CounterSet)super.clone();obj.packets = (int)packets.clone();obj.size = size;return obj;catch(CloneNotSupportedException e) throw new InternalError(Unexpected CloneNotSUpportedException: +e.getMessage();2.8 類方法下面開始寫類方法

9、:/* Set the packet counters* (such as when restoring from a database)*/protected final void setArray(int r1, int r2, int r3, int r4)throws IllegalArgumentException / Ensure the arrays are of equal size/if (r1.length != r2.length | r1.length != r3.length | r1.length !=r4.length)throw new IllegalArgum

10、entException(Arrays must be of the same size);System.arraycopy(r1, 0, r3, 0, r1.length);System.arraycopy(r2, 0, r4, 0, r1.length);2.9 toString 方法每一個類都最好定義toString 方法:public String toString() String retval = CounterSet: ;for (int i = 0; i 0) i + ; / 正確, 單獨作為一行不推薦使用:if (i0) i + ; / 錯誤, 和 在同一行或if (i0)

11、/ 錯誤, 應在上一行末尾。i + ; 語句永遠單獨作為一行。3.8 if else 語句(*)多條件連續判斷語句應按以下格式書寫:if ( ) else if () else 應注意if 語句總應使用括號,要避免以下容易出錯的寫法:if (condition) / 避免。此處略去了!statement;或if (condition) statement; 3.9 括號左括號和后一個字符之間不應該出現空格, 同樣, 右括號和前一個字符之間也不應該出現空格。下面的例子說明括號和空格的錯誤及正確使用:CallProc( AParameter ); / 錯誤CallProc(AParameter);

12、 / 正確不要在語句中使用無意義的括號。括號只應該為達到某種目的(如語法要求或增加程序可讀性)而出現在源代碼中。下面的例子說明錯誤和正確的用法:if (I) = 42) / 錯誤,括號毫無意義if (I = 42) or (J = 42) / 正確,的確需要括號3.10 語句每行只能包括一句代碼。如:argv+; / 正確argc-; / 正確argv+; argc-; / 避免!3.11 使用空格空格應依如下規則使用:1關鍵字與括號之間應加一空格(*),如:(while 與小括號間有空格)while (true) .注意在方法名和左括號之間不應加空格,這樣有助于區分關鍵字和方法調用。2參數列

13、表中逗號后面應加一個空格(*)。3操作數與操作符之間應該加一空格,除了“.”操作符和一元操作符,即“+”和“”。(*)例:a += c + d;a = (a + b) / (c * d);while (d+ = s+) n+;printSize(size is + foo + n);4for 語句中的表達式應以空格分開(*):for (expr1; expr2; expr3)5強制類型轉換應加空格,如:myMethod(byte) aNum, (Object) x);myMethod(int) (cp + 5), (int) (i + 3)+ 1);四、程序編寫規范4.1 使用方法來訪問實例變

14、量和類變量(*)如果沒有很好的理由,一般不應將實例變量或類變量設為public ,將變量設為public的典型應用是此類代表一個“數據結構”,而不包含任何方法。4.2 引用類變量和類方法(*)避免使用對象引用來訪問類(static)變量或類方法,而應使用類名來訪問。如:classMethod(); /OKAClass.classMethod(); /OKanObject.classMethod(); / 避免!4.3 常量(*)數字常量不應直接在編碼中出現,除非是for 循環中用于計數的1,0,或1。字符串常量盡量不直接在編碼中出現。4.4 ?前的邏輯運算表達式?前的邏輯運算表達式應以括號括起

15、,如:(x = 0) ? x : -x;4.5 特殊注釋注釋用XXX 表示當前是偽碼,但可以工作,用FIXME 標記有問題的部分。(Use XXX ina comment to flag something that is bogus but works. Use FIXME to flag something thatis bogus and broken.)4.6 例外申明的錯誤應該拋出一個RuntimeException 或者派生的例外。頂層的main()函數應該截獲所有的例外,并且打印(或者記錄在日志中)在屏幕上。五、編程實踐問題5.1 exit()exit 除了在main 中可以被調

16、用外,其他的地方不應該調用。因為這樣做不給任何代碼機會來截獲退出。一個類似后臺服務的程序不應該因為某一個庫模塊決定了要退出就退出。5.2 垃圾收集JAVA使用成熟的后臺垃圾收集技術來代替引用計數。但是這樣會導致一個問題:你必須在使用完對象的實例以后進行清場工作。例如: FileOutputStream fos = new FileOutputStream(projectFile) ; project.save(fos, IDE Project File) ; fos.close() ;fos = null ;記住!必須在使用完對象的實例以后將其關閉并且將其設置為null。5.3 final 類

17、絕對不要因為性能的原因將類定義為final 的(除非程序的框架要求)如果一個類還沒有準備好被繼承,最好在類文檔中注明,而不要將她定義為final 的。這是因為沒有人可以保證會不會由于什么原因需要繼承它。5.4 性能在寫代碼的時候,從頭至尾都應該考慮性能問題。這不是說時間都應該浪費在優化代碼上,而是我們時刻應該提醒自己要注意代碼的效率。比如:如果沒有時間來實現一個高效的算法,那么我們應該在文檔中記錄下來,以便在以后有空的時候再來實現她。不是所有的人都同意在寫代碼的時候應該優化性能這個觀點,他們認為性能優化的問題應該在項目的后期再去考慮,也就是在程序的輪廓已經實現了以后。應注意:不必要的對象構造不

18、要在循環中構造和釋放對象5.5 使用StringBuffer 對象在處理String 的時候要盡量使用StringBuffer 類,StringBuffer 類是構成String 類的基礎。String 類將StringBuffer 類封裝了起來,(以花費更多時間為代價)為開發人員提供了一個安全的接口。當我們在構造字符串的時候,我們應該用StringBuffer 來實現大部分的工作,當工作完成后將StringBuffer 對象再轉換為需要的String 對象。比如:如果有一個字符串必須不斷地在其后添加許多字符來完成構造,那么我們應該使用StringBuffer 對象和她的append() 方法。如果我

溫馨提示

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

評論

0/150

提交評論