[摘選]如何使用註釋文檔和提取?

如何使用註釋文檔和提取?

 --------摘自《Thinking in Java》第二章

2.8.1 註釋文檔
對於Java語言,最體貼的一項設計就是它並沒有打算讓人們爲了寫程序而寫程序——人們也需要考慮程序的文檔化問題。對於程序的文檔化,最大的問題莫過於對文檔的維護。若文檔與代碼分離,那麼每次改變代碼後都要改變文檔,這無疑會變成相當麻煩的一件事情。解決的方法看起來似乎很簡單:將代碼同文檔鏈接起來。爲達到這個目的,最簡單的方法是將所有內容都置於同一個文件。然而,爲使一切都整齊劃一,還必須使用一種特殊的註釋語法,以便標記出特殊的文檔;另外還需要一個工具,用於提取這些註釋,並按有價值的形式將其展現出來。這些都是Java必須做到的。
用於提取註釋的工具叫作javadoc。它採用了部分來自Java編譯器的技術,查找我們置入程序的特殊註釋標記。它不僅提取由這些標記指示的信息,也將毗鄰註釋的類名或方法名提取出來。這樣一來,我們就可用最輕的工作量,生成十分專業的程序文檔。
javadoc
輸出的是一個HTML文件,可用自己的Web瀏覽器查看。該工具允許我們創建和管理單個源文件,並生動生成有用的文檔。由於有了jvadoc,所以我們能夠用標準的方法創建文檔。而且由於它非常方便,所以我們能輕鬆獲得所有Java庫的文檔。

2.8.2
具體語法
所有javadoc命令都只能出現於“/**”註釋中。但和平常一樣,註釋結束於一個“*/”。主要通過兩種方式來使用javadoc:嵌入的HTML,或使用文檔標記。其中,文檔標記Doc tags)是一些以“@”開頭的命令,置於註釋行的起始處(但前導的“*”會被忽略)。
有三種類型的註釋文檔,它們對應於位於註釋後面的元素:類、變量或者方法。也就是說,一個類註釋正好位於一個類定義之前;變量註釋正好位於變量定義之前;而一個方法定義正好位於一個方法定義的前面。如下面這個簡單的例子所示:

/**
一個類註釋 */
public class docTest {
/**
一個變量註釋
*/
public int i;
/**
一個方法註釋
*/
public void f() {}
}

注意javadoc只能爲public(公共)和protected(受保護)成員處理註釋文檔。“private”(私有)和友好(詳見5章)成員的註釋會被忽略,我們看不到任何輸出(也可以用-private標記包括private成員)。這樣做是有道理的,因爲只有publicprotected成員纔可在文件之外使用,這是客戶程序員的希望。然而,所有類註釋都會包含到輸出結果裏。

上述代碼的輸出是一個HTML文件,它與其他Java文檔具有相同的標準格式。因此,用戶會非常熟悉這種格式,可在您設計的類中方便地漫遊。設計程序時,請務必考慮輸入上述代碼,用javadoc處理一下,觀看最終HTML文件的效果如何。

2.8.3
嵌入HTML
javadoc
HTML命令傳遞給最終生成的HTML文檔。這便使我們能夠充分利用HTML的巨大威力。當然,我們的最終動機是格式化代碼,不是爲了譁衆取寵。下面列出一個例子:


/**
* <pre>
* System.out.println(new Date());
* </pre>
*/

亦可象在其他Web文檔裏那樣運用HTML,對普通文本進行格式化,使其更具條理、更加美觀:

/**
*
<em>甚至</em>可以插入一個列表:
* <ol>
* <li>
項目一
* <li>
項目二
* <li>
項目三
* </ol>
*/

注意在文檔註釋中,位於一行最開頭的星號會被javadoc丟棄。同時丟棄的還有前導空格。javadoc會對所有內容進行格式化,使其與標準的文檔外觀相符。不要將<h1><hr>這樣的標題當作嵌入HTML使用,因爲javadoc會插入自己的標題,我們給出的標題會與之衝撞。
所有類型的註釋文檔——類、變量和方法——都支持嵌入HTML

2.8.4 @see
:引用其他類
所有三種類型的註釋文檔都可包含@see標記,它允許我們引用其他類裏的文檔。對於這個標記,javadoc會生成相應的HTML,將其直接鏈接到其他文檔。格式如下:

@see
類名
@see
完整類名
@see
完整類名#方法名

每一格式都會在生成的文檔裏自動加入一個超鏈接的“See Also”(參見)條目。注意javadoc不會檢查我們指定的超鏈接,不會驗證它們是否有效。

2.8.5
類文檔標記
隨同嵌入HTML@see引用,類文檔還可以包括用於版本信息以及作者姓名的標記。類文檔亦可用於接口目的(本書後面會詳細解釋)。

1. @version
格式如下:
@version
版本信息
其中,版本信息代表任何適合作爲版本說明的資料。若在javadoc命令行使用了“-version”標記,就會從生成的HTML文檔裏提取出版本信息。

2. @author
格式如下:
@author
作者信息
其中,作者信息包括您的姓名、電子函件地址或者其他任何適宜的資料。若在javadoc命令行使用了“-author”標記,就會專門從生成的HTML文檔裏提取出作者信息。
可爲一系列作者使用多個這樣的標記,但它們必須連續放置。全部作者信息會一起存入最終HTML代碼的單獨一個段落裏。

2.8.6
變量文檔標記
變量文檔只能包括嵌入的HTML以及@see引用。

2.8.7
方法文檔標記
除嵌入HTML@see引用之外,方法還允許使用針對參數、返回值以及違例的文檔標記。

1. @param
格式如下:
@param
參數名 說明
其中,參數名是指參數列表內的標識符,而說明代表一些可延續到後續行內的說明文字。一旦遇到一個新文檔標記,就認爲前一個說明結束。可使用任意數量的說明,每個參數一個。

2. @return
格式如下:
@return
說明
其中,說明是指返回值的含義。它可延續到後面的行內。

3. @exception
有關違例Exception)的詳細情況,我們會在第9章講述。簡言之,它們是一些特殊的對象,若某個方法失敗,就可將它們扔出對象。調用一個方法時,儘管只有一個違例對象出現,但一些特殊的方法也許能產生任意數量的、不同類型的違例。所有這些違例都需要說明。所以,違例標記的格式如下:
@exception
完整類名 說明
其中,完整類名明確指定了一個違例類的名字,它是在其他某個地方定義好的。而說明(同樣可以延續到下面的行)告訴我們爲什麼這種特殊類型的違例會在方法調用中出現。

4. @deprecated
這是Java 1.1的新特性。該標記用於指出一些舊功能已由改進過的新功能取代。該標記的作用是建議用戶不必再使用一種特定的功能,因爲未來改版時可能摒棄這一功能。若將一個方法標記爲@deprecated,則使用該方法時會收到編譯器的警告。

2.8.8
文檔示例
下面還是我們的第一個Java程序,只不過已加入了完整的文檔註釋:

92
頁程序

第一行:
//: Property.java
採用了我自己的方法:將一個“:”作爲特殊的記號,指出這是包含了源文件名字的一個註釋行。最後一行也用這樣的一條註釋結尾,它標誌着源代碼清單的結束。這樣一來,可將代碼從本書的正文中方便地提取出來,並用一個編譯器檢查。這方面的細節在第17章講述。

2.9
編碼樣式
一個非正式的Java編程標準是大寫一個類名的首字母。若類名由幾個單詞構成,那麼把它們緊靠到一起(也就是說,不要用下劃線來分隔名字)。此外,每個嵌入單詞的首字母都採用大寫形式。例如:
class AllTheColorsOfTheRainbow { // ...}
對於其他幾乎所有內容:方法、字段(成員變量)以及對象句柄名稱,可接受的樣式與類樣式差不多,只是標識符的第一個字母採用小寫。例如:

class AllTheColorsOfTheRainbow {
int anIntegerRepresentingColors;
void changeTheHueOfTheColor(int newHue) {
// ...
}
// ...
}

當然,要注意用戶也必須鍵入所有這些長名字,而且不能輸錯。

 

發佈了54 篇原創文章 · 獲贊 0 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章