1、版權信息,必須在 java 文件的開頭,比如:
/* * Copyright ? 2000 Shanghai XXX Co. Ltd. * All right reserved. */
其他不需要出現在 javadoc 的信息也可以包含在這里。
2、Package/Imports
package 行要在 import 行之前,import 中標準的包名要在本地的包名之前,而且按照字母順序排列。如果 import 行中包含了同一個包中的不同子目錄,則應該用 * 來處理。
package hotlava.net.stats;
import java.io.*;
import java.util.Observable;
import hotlava.util.Application
這里 java.io.* 使用來代替InputStream and OutputStream 的。
(關于這點,有點疑問,我知道詳細的寫出引用類的路徑及類名,可以較快的搜索到要引用的類,可是一個包中要引用的類過多的話,是不是用*來處理,比全部寫出來好哩?全部寫出來會很長,不方便閱讀,不過現在的IDE大都有收縮功能,問題也不大吧?)
3、對類的注釋(解釋類的功能),采用文檔注釋,寫在類聲明之前。例如:
/**
* A class representing a set of packet and byte counters
* It is observable to allow it to be watched, but only
* reports changes when the current set is complete
*/
接下來是類定義的格式,包含了在不同的行的 extends 和 implements
public class CounterSet extends Observable implements Cloneable
(這樣寫呀,第一次看到,我想我不太喜歡這種寫法,這也是規范嗎?)
4、類的成員變量,在聲明之前也要用文檔注釋說明其意義。例如:
/**
* Packet counters
*/
protected int[] packets;
public 的成員變量必須生成文檔(JavaDoc)。proceted、private和 package 定義的成員變量如果名字含義明確的話,可以沒有注釋。
(因為public的成員變量是類的接口,是供用戶程序員使用的,所以必須生成文檔,所以必須用文檔注釋標注)
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); } public int[] getPackets() { return packets; } public void setPackets(int[] packets) { this.packets = packets; }
其它的方法不要寫在一行上。
6、構造函數,應該用遞增的方式寫(比如:參數多的寫在后面)。
訪問類型 ("public", "private" 等.) 和 任何 "static", "final" 或 "synchronized" 應該在一行中,并
且方法和參數另寫一行,這樣可以使方法和參數更易讀。
public CounterSet(int size){ this.size = size; }
(這么寫?不習慣,保留意見) 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()); } }
8、類方法(定義為final或static的,類而非其實例對象所擁有的方法),例如:
/** * 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 IllegalArgumentException("Arrays must be of the same size"); System.arraycopy(r1, 0, r3, 0, r1.length); System.arraycopy(r2, 0, r4, 0, r1.length); }
9、toString 方法,每一個類都應該對繼承自Object類的 toString 方法進行重寫:
public String toString() { String retval = "CounterSet: "; for (int i = 0; i < data.length(); i++) { retval += data.bytes.toString(); retval += data.packets.toString(); } return retval; }如果main(String[]) 方法已經定義了, 那么它應該寫在類的底部.
10、main 方法
(這樣子的?為什么把main()方法寫在類的一開始不好哩?)