1. 程式人生 > >java中的註釋規範,生成javadoc

java中的註釋規範,生成javadoc

java中的註釋,大家應該已經很熟悉了。

文件註釋可以用於對類、屬性、方法等進行說明。寫文件註釋時除了需要使用 /** .... */ 限定之外,還需要注意註釋內部的一些細節問題。

1文件和文件註釋的格式化

生成的文件是 HTML 格式,而這些 HTML 格式的識別符號並不是 javadoc 加的,而是我們在寫註釋的時候寫上去的。比如,需要換行時,不是敲入一個回車符,而是寫入 <br>,如果要分段,就應該在段前寫入 <p>。  

  因此,格式化文件,就是在文件註釋中新增相應的 HTML 標識。  

  文件註釋的正文並不是直接複製到輸出檔案 (文件的 HTML 檔案),而是讀取每一行後,刪掉前導的 * 號及 * 號以前的空格,再輸入到文件的。如 /** 

* This is first line. <br> 

***** This is second line. <br> This is third line. */  

  編譯輸出後的 HTML 原始碼則是 This is first line. <br> This is second line. <br> This is third line.   

  前導的 * 號允許連續使用多個,其效果和使用一個 * 號一樣,但多個 * 號前不能有其它字元分隔,否則分隔符及後面的 * 號都將作為文件的內容。

還有一點需要說明,文件註釋只說明緊接其後的類、屬性或者方法,如:

/** commnet forclass */  

public classTest { ...... }


2文件註釋的三部分

根據在文件中顯示的效果,文件註釋分為三部分。先舉例如下,以便說明。

 /**  

* show 方法的簡述. 

* <p>show 方法的詳細說明第一行<br> * show 方法的詳細說明第二行

* @param b true 表示顯示,false 表示隱藏

* @return 沒有返回值

*/ 

public voidshow(boolean b) { frame.show(b); }


第一部分是簡述,列表中屬性名或者方法名後面那段說明就是簡述。簡述部分寫在一段文件註釋的最前面,第一個點號 (.) 之前 (包括點號)。換句話說,就是用第一個點號分隔文件註釋,之前是簡述,之後是第二部分和第三部分。如上例中的 “* show 方法的簡述.”。 

有時,即使正確地以一個點號作為分隔,javadoc 仍然會出錯,把點號後面的部分也做為了第一部分。為了解決這個問題,我們可以使用一個 <p> 標誌將第二分部分分開,如上例的“* <p>show 方法的詳細說明第一行 ....”。 

第二部分是詳細說明部分。該部分對屬性或者方法進行詳細的說明,在格式上沒有什麼特殊的要求,可以包含若干個點號。 

第三部分是特殊說明部分。這部分包括版本說明、引數說明、返回值說明等。第三部分在上例中相應的程式碼是:

* @param b true 表示顯示,false 表示隱藏  

* @return 沒有返回值 

除了 @param 和 @return 之外,還有其它的一些特殊標記,分別用於對類、屬性和方法的說明。

三. 使用 javadoc 標記

javadoc 標記是插入文件註釋中的特殊標記,它們用於標識程式碼中的特殊引用。javadoc 標記由“@”及其後所跟的標記型別和專用註釋引用組成。記住了,三個部分——@、標記型別、專用註釋引用。雖然 @ 和 標記型別之間有時可以用空格符分隔,但是推薦將它們緊挨著寫,以減少出錯機會。

javadoc 標記有如下一些:

標記                            用於                                                        作用 

@author           對類的說明                                          標明開發該類模組的作者  

@version          對類的說明                                          標明該類模組的版本  

@see                 對類、屬性、方法的說明              參考轉向,也就是相關主題  

@param           對方法的說明                                     對方法中某引數的說明 

@return                     對方法的說明                                     對方法返回值的說明 

@exception     對方法的說明                                     對方法可能丟擲的異常進行說明

1 @see 的使用

@see 的句法有三種: 

@see 類名  

@see #方法名或屬性名

@see 類名#方法名或屬性名

例:

/**  

* @see     java.lang.String 

* @see     #str 

* @see     #str() 

* @see  #main(String[]) 

* @see     java.lang.Object#toString() 

*/  

public classTestJavaDoc  {   

private Stringstr; 

public voidstr(){   }

public staticvoid main(String[] args){   }

}


生成的文件的相關部分如下圖

2. 使用 @author、@version 說明類

這兩個標記分別用於指明類的作者和版本。預設情況下 javadoc 將其忽略,但命令列開關 -author 和 -version 可以修改這個功能,使其包含的資訊被輸出。

這兩個標記的句法如下:   

@author 作者名  

@version 版本號   

其中,@author 可以多次使用,以指明多個作者,生成的文件中每個作者之間使用逗號 (,) 隔開。@version 也可以使用多次,只有第一次有效,生成的文件中只會顯示第一次使用 @version 指明的版本號。如下例

/**  

* @author Fancy

* @author Bird

* @versionVersion 1.00

* @versionVersion 2.00

*/ 

public classTestJavaDoc {}


生成文件的相關部分如圖

3. 使用 @param、@return 和 @exception 說明方法

這三個標記都是隻用於方法的。@param 描述方法的引數,@return描述方法的返回值,@exception 描述方法可能丟擲的異常。它們的句法如下: 

@param 引數名 引數說明

@return 返回值說明

@exception 異常類名 說明 

每一個 @param 只能描述方法的一個引數,所以,如果方法需要多個引數,就需要多次使用 @param 來描述。 

一個方法中只能用一個 @return,如果文件說明中列了多個@return,則 javadoc 編譯時會發出警告,且只有第一個 @return 在生成的文件中有效。

方法可能丟擲的異常應當用@exception 描述。由於一個方法可能丟擲多個異常,所以可以有多個 @exception。每個 @exception 後面應有簡述的異常類名,說明中應指出丟擲異常的原因。需要注意的是,異常類名應該根據原始檔的 import 語句確定是寫出類名還是類全名。示例如下:

public class TestJavaDoc {  

/** 

* @param n a switch 

* @param b excrescent parameter 

* @return true or false 

* @return excrescent return 

* @exception java.lang.Exception throw when switch is 1

* @exception NullPointerException throw when parameter n is null 

*/ 

public boolean fun(Integer n) throws Exception { 

switch (n.intValue()) { 

case 0: 

break; 

case 1: 

throw new Exception("Test Only"); 

default: 

return false; 

return true; 

}

}



使用 javadoc 編譯生成的文件相關部分如下圖:

四. javadoc 命令

執行: javadoc -help 可以看到 javadoc 的用法,這裡列舉常用引數如下:

用法:javadoc [options][packagenames] [sourcefiles]

選項: 

-public 僅顯示 public 類和成員  

-protected 顯示protected/public 類和成員 (預設) 

-package 顯示package/protected/public 類和成員

-private 顯示所有類和成員  

-d <directory> 輸出檔案的目標目錄 

-version 包含 @version 段 

-author 包含 @author 段  

-splitindex 將索引分為每個字母對應一個檔案 

-windowtitle <text> 文件的瀏覽器視窗標題  

javadoc 編譯文件時可以給定包列表,也可以給出源程式檔案列表。例如在 CLASSPATH 下有兩個包若干類如下:   

fancy.Editor   fancy.Test   

fancy.editor.ECommand  

fancy.editor.EDocument  

fancy.editor.EView  這裡有兩個包 (fancy 和fancy.editor) 和 5 個類。那麼編譯時 (Windows 環境) 可以使用如下 javadoc 命令:

javadocfancy\Test.java fancy\Editor.java fancy\editor\ECommand.java

fancy\editor\EDocument.javafancy\editor\EView.java 

這是給出 java 原始檔作為編譯引數的方法,注意命令中指出的是檔案路徑,應該根據實際情況改變。也可以是給出包名作為編譯引數,如: 

javadoc fancyfancy.editor 

用瀏覽器開啟生成文件的index.html 檔案即可發現兩種方式編譯結果的不同,如下圖:

用第二條命令生成的文件被框架分成了三部分:包列表、類列表和類說明。在包列表中選擇了某個包之後,類列表中就會列出該包中的所有類;在類列表中選擇了某個類之後,類說明部分就會顯示出該類的詳細文件

下面再來細說選項。 

-public、-protected、-package、-private 四個選項,只需要任選其一即可。它們指定的顯示類成員的程度。它們顯示的成員多少是一個包含的關係,如下: 

-private (顯示所有類和成員)  

-package (顯示package/protected/public 類和成員) 

-protected (顯示protected/public 類和成員) 

-public (僅顯示 public 類和成員)  

-d 選項允許你定義輸出目錄。如果不用 -d 定義輸出目錄,生成的文件檔案會放在當前目錄下。-d 選項的用法是 

-d 目錄名 

目錄名為必填項,也就是說,如果你使用了-d 引數,就一定要為它指定一個目錄。這個目錄必須已經存在了,如果還不存在,請在執行 javadoc 之前建立該目錄。

 -version 和 -author 用於控制生成文件時是否生成@version 和 @author 指定的內容。不加這兩個引數的情況下,生成的文件中不包含版本和作者資訊。 

-splitindex 選項將索引分為每個字母對應一個檔案。預設情況下,索引檔案只有一個,且該檔案中包含所有索引內容。當然生成文件內容不多的時候,這樣做非常合適,但是,如果文件內容非常多的時候,這個索引檔案將包含非常多的內容,顯得過於龐大。使用 -splitindex 會把索引檔案按各索引項的第一個字母進行分類,每個字母對應一個檔案。這樣,就減輕了一個索引檔案的負擔。

 -windowtitle 選項為文件指定一個標題,該標題會顯示在視窗的標題欄上。如果不指定該標題,而預設的文件標題為“生成的文件(無標題)”。該選項的用法是: 

-windowtitle 標題  標題是一串沒有包含空格的文字,因為空格符是用於分隔各引數的,所以不能包含空格。同 -d 類似,如果指定了 -windowtitle 選項,則必須指定標題文字。