java程序編寫規(guī)范_第1頁
java程序編寫規(guī)范_第2頁
java程序編寫規(guī)范_第3頁
java程序編寫規(guī)范_第4頁
java程序編寫規(guī)范_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、所有的程序開發(fā)手冊都包含了各種規(guī)則。一些習(xí)慣自由程序人員可能對這些規(guī)則很不適應(yīng),但是在多個開發(fā)人員共同寫作的情況下,這些規(guī)則是必需的。這不僅僅是為了開發(fā)效率來考慮,而且也是為了后期維護(hù)考慮。命名規(guī)范定義這個規(guī)范的目的是讓項(xiàng)目中所有的文檔都看起來像一個人寫的,增加可讀性,減少項(xiàng)目組中因?yàn)閾Q人而帶來的損失。(這些規(guī)范并不是一定要絕對遵守,但是一定要讓程序有良好的可讀性Package 的命名Package 的名字應(yīng)該都是由一個小寫單詞組成。Class 的命名Class 的名字必須由大寫字母開頭而其他字母都小寫的單詞組成Class 變量的命名變量的名字必須用一個小寫字母開頭。后面的單詞用大寫字母開頭。

2、Static Final 變量的命名Static Final 變量的名字應(yīng)該都大寫,并且指出完整含義。參數(shù)的命名參數(shù)的名字必須和變量的命名規(guī)范一致。數(shù)組的命名數(shù)組應(yīng)該總是用下面的方式來命名:byte buffer;而不是:byte buffer;方法的參數(shù)使用有意義的參數(shù)命名,如果可能的話,使用和要賦值的字段一樣的名字:SetCounter(int sizethis.size = size;Java 文件樣式所有的 Java(*.java 文件都必須遵守如下的樣式規(guī)則版權(quán)信息版權(quán)信息必須在 java 文件的開頭,比如:/* Copyright ? 2000 Shanghai XXX Co. L

3、td.* All right reserved.*/其他不需要出現(xiàn)在 javadoc 的信息也可以包含在這里。Package/Importspackage 行要在 import 行之前,import 中標(biāo)準(zhǔn)的包名要在本地的包名之前,而且按照字母順序排列。如果 import 行中包含了同一個包中的不同子目錄,則應(yīng)該用 * 來處理。Class接下來的是類的注釋,一般是用來解釋類的。/* A class representing a set of packet and byte counters* It is observable to allow it to be watched, but onl

4、y* reports changes when the current set is complete*/接下來是類定義,包含了在不同的行的 extends 和 implementspublic class CounterSetextends Observableimplements CloneableClass Fields接下來是類的成員變量:/* Packet counters*/protected int packets;public 的成員變量必須生成文檔(JavaDoc。proceted、private和 package 定義的成員變量如果名字含義明確的話,可以沒有注釋。存取方法接

5、下來是類變量的存取的方法。它只是簡單的用來將類的變量賦值獲取值的話,可以簡單的寫在一行上。/* Get the counters* return an array containing the statistical data. This array has been* freshly allocated and can be modified by the caller.*/public int getPackets( return copyArray(packets, offset; public int getBytes( return copyArray(bytes, offset;

6、public int getPackets( return packets; public void setPackets(int packets this.packets = packets; 其它的方法不要寫在一行上構(gòu)造函數(shù)接下來是構(gòu)造函數(shù),它應(yīng)該用遞增的方式寫(比如:參數(shù)多的寫在后面。訪問類型 (public, private 等. 和任何 static, final 或 synchronized 應(yīng)該在一行中,并且方法和參數(shù)另寫一行,這樣可以使方法和參數(shù)更易讀。publicCounterSet(int sizethis.size = size;克隆方法頂62007-1-12 18:44

7、回復(fù)如果這個類是可以被克隆的,那么下一步就是 clone 方法:publicObject clone( try CounterSet obj = (CounterSetsuper.clone(;obj.packets = (intpackets.clone(;obj.size = size;return obj;catch(CloneNotSupportedException e throw new InternalError(Unexpected CloneNotSUpportedExcept ion: + e.getMessage(;類方法下面開始寫類的方法:/* Set the pack

8、et counters* (such as when restoring from a database*/protected finalvoid setArray(int r1, int r2, int r3, int r4throws IllegalArgumentException/ Ensure the arrays are of equal size/if (r1.length != r2.length | r1.length != r3.length | r1. length != r4.lengththrow new IllegalArgumentException(Arrays

9、 must be of the sa me size;System.arraycopy(r1, 0, r3, 0, r1.length;System.arraycopy(r2, 0, r4, 0, r1.length;toString 方法無論如何,每一個類都應(yīng)該定義 toString 方法:publicString toString( String retval = CounterSet: ;for (int i = 0; i 0 i + ; / 錯誤, 和 在同一行if (i0 i +; / 正確, 單獨(dú)作為一行 語句永遠(yuǎn)單獨(dú)作為一行.如果 語句應(yīng)該縮進(jìn)到與其相對應(yīng)的 那一行相對齊的位置。

10、括號左括號和后一個字符之間不應(yīng)該出現(xiàn)空格, 同樣, 右括號和前一個字符之間也不應(yīng)該出現(xiàn)空格. 下面的例子說明括號和空格的錯誤及正確使用:CallProc( AParameter ; / 錯誤CallProc(AParameter; / 正確不要在語句中使用無意義的括號. 括號只應(yīng)該為達(dá)到某種目的而出現(xiàn)在源代碼中。下面的例子說明錯誤和正確的用法:if (I = 42 / 錯誤 - 括號毫無意義if (I = 42 or (J = 42 then / 正確 - 的確需要括號程序編寫規(guī)范exit(exit 除了在 main 中可以被調(diào)用外,其他的地方不應(yīng)該調(diào)用。因?yàn)檫@樣做不給任何代碼代碼機(jī)會來截獲退

11、出。一個類似后臺服務(wù)地程序不應(yīng)該因?yàn)槟骋粋€庫模塊決定了要退出就退出。異常申明的錯誤應(yīng)該拋出一個RuntimeException或者派生的異常。頂層的main(函數(shù)應(yīng)該截獲所有的異常,并且打印(或者記錄在日志中在屏幕上。2007-1-12 18:44回復(fù)JAVA使用成熟的后臺垃圾收集技術(shù)來代替引用計(jì)數(shù)。但是這樣會導(dǎo)致一個問題:你必須在使用完對象的實(shí)例以后進(jìn)行清場工作。比如一個prel的程序員可能這么寫:.FileOutputStream fos = new FileOutputStream(projectFile;project.save(fos, IDE Project File;.除非輸出流

12、一出作用域就關(guān)閉,非引用計(jì)數(shù)的程序語言,比如JAVA,是不能自動完成變量的清場工作的。必須象下面一樣寫:FileOutputStream fos = new FileOutputStream(projectFile;project.save(fos, IDE Project File;fos.close(;Clone下面是一種有用的方法:implements CloneablepublicObject clone(try ThisClass obj = (ThisClasssuper.clone(;obj.field1 = (intfield1.clone(;obj.field2 = fiel

13、d2;return obj; catch(CloneNotSupportedException e throw new InternalError(Unexpected CloneNotSUpportedExcept ion: + e.getMessage(;final 類絕對不要因?yàn)樾阅艿脑驅(qū)㈩惗x為 final 的(除非程序的框架要求如果一個類還沒有準(zhǔn)備好被繼承,最好在類文檔中注明,而不要將她定義為 final 的。這是因?yàn)闆]有人可以保證會不會由于什么原因需要繼承她。訪問類的成員變量大部分的類成員變量應(yīng)該定義為 protected 的來防止繼承類使用他們。注意,要用int packets

14、,而不是int packets,后一種永遠(yuǎn)也不要用。public void setPackets(int packets this.packets = packe ts; CounterSet(int sizethis.size = size;編程技巧byte 數(shù)組轉(zhuǎn)換到 characters為了將 byte 數(shù)組轉(zhuǎn)換到 characters,你可以這么做:Hello world!.getBytes(;Utility 類Utility 類(僅僅提供方法的類應(yīng)該被申明為抽象的來防止被繼承或被初始化。初始化下面的代碼是一種很好的初始化數(shù)組的方法:objectArguments = new Obje

15、ct arguments ;枚舉類型JAVA 對枚舉的支持不好,但是下面的代碼是一種很有用的模板:class Colour public static final Colour BLACK = new Colour(0, 0, 0;public static final Colour RED = new Colour(0xFF, 0, 0; public static final Colour GREEN = new Colour(0, 0xFF, 0; public static final Colour BLUE = new Colour(0, 0, 0xFF; public static

16、 final Colour WHITE = new Colour(0xFF, 0xFF, 0 xFF;這種技術(shù)實(shí)現(xiàn)了RED, GREEN, BLUE 等可以象其他語言的枚舉類型一樣使用的常量。他們可以用 = 操作符來比較。但是這樣使用有一個缺陷:如果一個用戶用這樣的方法來創(chuàng)建顏色 B LACKnew Colour(0,0,0 那么這就是另外一個對象, =操作符就會產(chǎn)生錯誤。 她的 equal( 方法仍然有效。由于這個原因,這個技術(shù)的缺陷最好注明在文檔中, 或者只在自己的包中使用。 Swing 避免使用 AWT 組件 混合使用 AWT 和 Swing 組件 如果要將 AWT 組件和 Swing

17、組件混合起來使用的話,請小心使用。 實(shí)際上,盡量不要將他們混合起來使用。 滾動的 AWT 組件 AWT 組件絕對不要用 JscrollPane 類來實(shí)現(xiàn)滾動。滾動 AWT 組件的 時(shí)候一定要用 AWT ScrollPane 組件來實(shí)現(xiàn)。 避免在 InternalFrame 組件中使用 AWT 組件 盡量不要這么做,要不然會出現(xiàn)不可預(yù)料的后果。 Z-Order 問題 AWT 組件總是顯示在 Swing 組件之上。當(dāng)使用包含 AWT 組件的 POP -UP 菜單的時(shí)候要小心,盡量不要這樣使用。 調(diào)試 調(diào)試在軟件開發(fā)中是一個很重要的部分,存在軟件生命周期的各個部 分中。調(diào)試能夠用配置開、關(guān)是最基本的

18、。 很常用的一種調(diào)試方法就是用一個 PrintStream 類成員, 在沒有定義 調(diào)試流的時(shí)候就為 null,類要定義一個 debug 方法來設(shè)置調(diào)試用的 流。 性能 在寫代碼的時(shí)候,從頭至尾都應(yīng)該考慮性能問題。這不是說時(shí)間都應(yīng) 該浪費(fèi)在優(yōu)化代碼上, 而是我們時(shí)刻應(yīng)該提醒自己要注意代碼的效率。 比如:如果沒有時(shí)間來實(shí)現(xiàn)一個高效的算法,那么我們應(yīng)該在文檔中 記錄下來,以便在以后有空的時(shí)候再來實(shí)現(xiàn)她。 不是所有的人都同意在寫代碼的時(shí)候應(yīng)該優(yōu)化性能這個觀點(diǎn)的,他們 認(rèn)為性能優(yōu)化的問題應(yīng)該在項(xiàng)目的后期再去考慮,也就是在程序的輪 廓已經(jīng)實(shí)現(xiàn)了以后。 不必要的對象構(gòu)造 不要在循環(huán)中構(gòu)造和釋放對象 使用 StringBuffer 對象 在處理 String 的時(shí)候要盡量使用 StringBuffer 類, StringBuffer 類是構(gòu)成 String 類的基礎(chǔ)。 String 類將 StringBuffer 類封裝了起 來, (以花費(fèi)更多時(shí)間為代價(jià))為開發(fā)人員提供了一個安全的接口。當(dāng) 我們在構(gòu)造字符串的時(shí)候,我們應(yīng)該用 StringBuffer 來實(shí)現(xiàn)大部分 的工作,當(dāng)工作完成后將 StringBuffer 對象再轉(zhuǎn)換為需要的 Strin g 對象。比如:如果有一個字符串必須不斷地在其后添加

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論