Java文檔注釋全攻略

image
image
image
image

注釋:注釋起到對(duì)代碼標(biāo)注和解釋的作用步绸,如果你去看看JDK源碼拳话,會(huì)發(fā)現(xiàn)他們有許多的注釋?zhuān)易⑨屖潜却a還要多的珍剑,可見(jiàn)為代碼添加注釋是非常重要的钓辆,寫(xiě)好注釋能讓別人更加容易看懂你的代碼缕溉,注釋可以分為以下三種考传。

(一)單行注釋

使用//進(jìn)行注釋?zhuān)?/p>

//阿平好帥

(二)多行注釋

使用/**/進(jìn)行注釋?zhuān)?/p>

/** 阿平是真的帥/

image
image
image

(三)文檔注釋

使用/** */進(jìn)行注釋?zhuān)?/p>

/** 
    阿平也太帥了吧
*/

文檔注釋主要是用來(lái)生成java開(kāi)發(fā)文檔javadoc的,生成的開(kāi)發(fā)文檔和Java本身的API幫助文檔是一樣的证鸥,也就是對(duì)你所寫(xiě)的類(lèi)進(jìn)行解釋說(shuō)明僚楞,所以它還需要搭配一些文檔標(biāo)記,進(jìn)行解釋說(shuō)明敌土,而且在文檔注釋中可以使用HTML語(yǔ)言镜硕,jdk源碼中有大量的文檔注釋?zhuān)耘臋n注釋可以幫助你更好的看懂源碼。

文檔注釋通常還會(huì)配合HTML標(biāo)簽進(jìn)行使用返干,比較常用的標(biāo)簽有<p><pre>等標(biāo)簽兴枯,p標(biāo)簽用于表示段落,pre標(biāo)簽可用于顯示計(jì)算機(jī)源碼矩欠。

注意:pre標(biāo)簽中如果有小于號(hào)财剖、大于號(hào)、例如泛型 在生產(chǎn)javadoc時(shí)會(huì)報(bào)錯(cuò)癌淮。


1躺坟、文檔標(biāo)記

(1)通用的文檔標(biāo)記

以下文檔標(biāo)記在類(lèi)、方法乳蓄、變量和常量上都經(jīng)常使用咪橙。

  1. @link: 用于快速鏈接到相關(guān)代碼,使用格式:{@link 包名.類(lèi)名#方法名(參數(shù)類(lèi)型)}

    // 完全限定的類(lèi)名
    {@link java.util.Collections}
    
    // 省略包名,只寫(xiě)類(lèi)名
    {@link String}
    
    // 省略類(lèi)名美侦,表示指向當(dāng)前的某一個(gè)方法
    {@link #toString()}
    
    // 完全限定方法名产舞,包名.類(lèi)名.方法名(參數(shù)類(lèi)型)
    {@link java.lang.String#charAt(int)}
    
  2. @code: 將文本標(biāo)記為代碼樣式文本,一般在Javadoc中只要涉及到類(lèi)名或者方法名菠剩,都需要使用@code進(jìn)行標(biāo)記易猫,使用格式:{@code text},其會(huì)被解析為<code> text </code>

    //標(biāo)記類(lèi)名
    {@code ArrayList}
    
    //標(biāo)記方法名
    {@code isEmpty}
    
    //標(biāo)記某個(gè)代碼關(guān)鍵字
    {@code null}
    

(2)類(lèi)上常用文檔標(biāo)記

  1. @param:如果一個(gè)類(lèi)支持泛型時(shí)具壮,可以通過(guò)@param來(lái)解釋泛型的類(lèi)型

    /**
      @param <E> the type of elements in this list  
    */
    
  1. @author:用來(lái)標(biāo)記作者准颓,如果一段程序是由多個(gè)作者來(lái)維護(hù),則可以標(biāo)記多個(gè)@author,@author 后面可以跟作者姓名(也可以附帶作者郵箱地址)棺妓、組織名稱(chēng)(也可以附帶組織官網(wǎng)地址)

    // 純文本作者
    @author Rod Johnson
    
    // 純文本作者攘已,郵件
    @author Igor Hersht, igorh@ca.ibm.com
    
    // 超鏈接郵件 純文本作者
    @author <a href="mailto:ovidiu@cup.hp.com">Ovidiu Predescu</a>
    
    // 純文本郵件
    @author shane_curcuru@us.ibm.com
    
    // 純文本 組織
    @author Apache Software Foundation
    
    // 超鏈接組織地址 純文本組織
    @author <a > Apache Jakarta Turbine</a>
    
    
  1. @see :另請(qǐng)參閱的意思,一般用于標(biāo)記與本類(lèi)相關(guān)聯(lián)的類(lèi)涧郊,該標(biāo)注可以用在類(lèi)或方法上贯被。

    /**
     * @see IntStream
     * @see LongStream
     * @see DoubleStream
     * @see <a href="package-summary.html">java.util.stream</a>
     * /
    
    
  2. @since:表示從以下版本開(kāi)始有這個(gè)類(lèi)眼五,標(biāo)記文件創(chuàng)建時(shí)項(xiàng)目當(dāng)時(shí)對(duì)應(yīng)的版本妆艘,后面可以跟版本號(hào)或是時(shí)間。

    //跟版本號(hào)看幼,以下是ArrayList類(lèi)里的標(biāo)記批旺,說(shuō)明從jdk1.2開(kāi)始就有該類(lèi)了
    /*
       * @since   1.2
    **/
    //跟時(shí)間
    /**
    * @since 20 April 2021
    */
    
  3. @version:用于標(biāo)記當(dāng)前類(lèi)版本,默認(rèn)為1.0

     /**
     * @version 1.0
     */
    

以上是類(lèi)上常用的文檔標(biāo)注诵姜,類(lèi)上的文檔格式如下:

  1. 概要描述:通常用一段話(huà)簡(jiǎn)要的描述該類(lèi)的基本內(nèi)容汽煮。
  2. 詳細(xì)描述:通常用幾大段話(huà)詳細(xì)描述該類(lèi)的功能與相關(guān)情況。
  3. 文檔標(biāo)注:用于標(biāo)注該類(lèi)的作者棚唆、時(shí)間暇赤、版本、參略等信息宵凌。

以下是String類(lèi)的中文檔標(biāo)注的事例:

/**
 * The {@code String} class represents character strings. All
 * string literals in Java programs, such as {@code "abc"}, are
 * implemented as instances of this class.
 * <p>
 * Strings are constant; their values cannot be changed after they
 * are created. String buffers support mutable strings.
 * Because String objects are immutable they can be shared. For example:
 * <blockquote><pre>
 *     String str = "abc";
 * </pre></blockquote><p>
 * is equivalent to:
 * <blockquote><pre>
 *     char data[] = {'a', 'b', 'c'};
 *     String str = new String(data);
 * </pre></blockquote><p>
 * Here are some more examples of how strings can be used:
 * <blockquote><pre>
 *     System.out.println("abc");
 *     String cde = "cde";
 *     System.out.println("abc" + cde);
 *     String c = "abc".substring(2,3);
 *     String d = cde.substring(1, 2);
 * </pre></blockquote>
 * <p>
 * The class {@code String} includes methods for examining
 * individual characters of the sequence, for comparing strings, for
 * searching strings, for extracting substrings, and for creating a
 * copy of a string with all characters translated to uppercase or to
 * lowercase. Case mapping is based on the Unicode Standard version
 * specified by the {@link java.lang.Character Character} class.
 * <p>
 * The Java language provides special support for the string
 * concatenation operator (&nbsp;+&nbsp;), and for conversion of
 * other objects to strings. For additional information on string
 * concatenation and conversion, see <i>The Java&trade; Language Specification</i>.
 *
 * <p> Unless otherwise noted, passing a {@code null} argument to a constructor
 * or method in this class will cause a {@link NullPointerException} to be
 * thrown.
 *
 * <p>A {@code String} represents a string in the UTF-16 format
 * in which <em>supplementary characters</em> are represented by <em>surrogate
 * pairs</em> (see the section <a href="Character.html#unicode">Unicode
 * Character Representations</a> in the {@code Character} class for
 * more information).
 * Index values refer to {@code char} code units, so a supplementary
 * character uses two positions in a {@code String}.
 * <p>The {@code String} class provides methods for dealing with
 * Unicode code points (i.e., characters), in addition to those for
 * dealing with Unicode code units (i.e., {@code char} values).
 *
 * <p>Unless otherwise noted, methods for comparing Strings do not take locale
 * into account.  The {@link java.text.Collator} class provides methods for
 * finer-grain, locale-sensitive String comparison.
 *
 * @implNote The implementation of the string concatenation operator is left to
 * the discretion of a Java compiler, as long as the compiler ultimately conforms
 * to <i>The Java&trade; Language Specification</i>. For example, the {@code javac} compiler
 * may implement the operator with {@code StringBuffer}, {@code StringBuilder},
 * or {@code java.lang.invoke.StringConcatFactory} depending on the JDK version. The
 * implementation of string conversion is typically through the method {@code toString},
 * defined by {@code Object} and inherited by all classes in Java.
 *
 * @author  Lee Boynton
 * @author  Arthur van Hoff
 * @author  Martin Buchholz
 * @author  Ulf Zibis
 * @see     java.lang.Object#toString()
 * @see     java.lang.StringBuffer
 * @see     java.lang.StringBuilder
 * @see     java.nio.charset.Charset
 * @since   1.0
 * @jls     15.18.1 String Concatenation Operator +
 */
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence {
}

(3)方法上常用文檔標(biāo)記

  1. @param:該文檔標(biāo)記后面寫(xiě)方法的參數(shù)名鞋囊,再寫(xiě)參數(shù)描述。

    /**
    * @param str 
    * the {@code CharSequence} to check (may be {@code null})
    */
    public static boolean containsWhitespace(@Nullable CharSequence str) {}
    
    
  2. @return:該文檔標(biāo)記后面寫(xiě)返回值得描述瞎惫。

    /**
    * @return {@code true} if the {@code String} is not {@code null}, its
    */
    public static boolean hasText(@Nullable String str){}
    
  3. @throws:該文檔標(biāo)記后面寫(xiě)異常的類(lèi)型和異常的描述溜腐,用于描述該方法可能拋出的異常。

    /**
    * @throws IllegalArgumentException when the given source contains invalid encoded sequences
    */
    public static String uriDecode(String source, Charset charset){}
    
    
  4. @exception:該標(biāo)注用于描述方法簽名throws對(duì)應(yīng)的異常瓜喇。

    /**
    * @exception IllegalArgumentException if <code>key</code> is null.
    */
    public static Object get(String key) throws IllegalArgumentException {}
    
  5. @see:可用在類(lèi)與方法上挺益,表示參考的類(lèi)或方法。

    /**
    * @see java.net.URLDecoder#decode(String, String)
    */
    public static String uriDecode(String source, Charset charset){}
    

以上是方法上常用的文檔標(biāo)注乘寒,方法上的文檔格式如下:

  1. 概要描述:通常用一段話(huà)簡(jiǎn)要的描述該方法的基本內(nèi)容望众。
  2. 詳細(xì)描述:通常用幾大段話(huà)詳細(xì)描述該方法的功能與相關(guān)情況。
  3. 文檔標(biāo)注:用于標(biāo)注該方法的參數(shù)、返回值烂翰、異常叉袍、參略等信息。

以下是String類(lèi)中charAt方法的示例:

/**
     * Returns the {@code char} value at the
     * specified index. An index ranges from {@code 0} to
     * {@code length() - 1}. The first {@code char} value of the sequence
     * is at index {@code 0}, the next at index {@code 1},
     * and so on, as for array indexing.
     *
     * <p>If the {@code char} value specified by the index is a
     * <a href="Character.html#unicode">surrogate</a>, the surrogate
     * value is returned.
     *
     * @param      index   the index of the {@code char} value.
     * @return     the {@code char} value at the specified index of this string.
     *             The first {@code char} value is at index {@code 0}.
     * @exception  IndexOutOfBoundsException  if the {@code index}
     *             argument is negative or not less than the length of this
     *             string.
     */
    public char charAt(int index) {}

(4)變量和常量上的文檔規(guī)范

變量和常量上用的比較多的文檔標(biāo)記是@link和@code刽酱,主要注釋該常量或變量的基本用法和相關(guān)內(nèi)容喳逛。

以下是示例:

/**
     * The value is used for character storage.
     *
     * @implNote This field is trusted by the VM, and is a subject to
     * constant folding if String instance is constant. Overwriting this
     * field after construction will cause problems.
     *
     * Additionally, it is marked with {@link Stable} to trust the contents
     * of the array. No other facility in JDK provides this functionality (yet).
     * {@link Stable} is safe here, because value is never null.
     */
    private final byte[] value;

image

2、生成幫助文檔

首先先展示下我寫(xiě)的文檔注釋代碼:

HelloWorld.java

package demo2;
/**
 * <p>這是一個(gè)測(cè)試javadoc的類(lèi)
 * 
 * @author codepeace
 * @version 1.0
 * @since  1.8
 *
 */
public class HelloWorld {
    String name;
    
    /**
     * 
     * @param name
     * @return name 
     * @throws Exception
     * {@code name} 
     */
    public String test(String name)throws Exception{
        return name;
    }
}

Doc.java

package demo2;
/**
 * <p>這是一個(gè)測(cè)試javadoc的類(lèi)
 * 
 * @author codepeace
 * @version 1.0
 * @since  1.8
 *
 */
public class Doc {
    String name;
    
    /**
     * 
     * @param name
     * @return name 
     * @throws Exception
     * {@code name} 
     */
    public String test(String name)throws Exception{
        return name;
    }
}

(1)使用命令行的方式

  1. 用wiodow打開(kāi)cmd終端棵里,然后進(jìn)入要編譯的java文件目錄的路徑中润文,如下所示:
image
  1. 輸入命令:javadoc -encoding UTF-8 -charset UTF-8 *.java,就能將你的java文件編譯成幫助文檔殿怜。
  • -encoding 是編碼格式典蝌, -charset是字符集格式,需要查看你文件的編碼格式头谜,可以通過(guò)打開(kāi)記事本查看編碼格式骏掀。
image
image
  1. 編譯成功后你后發(fā)現(xiàn)當(dāng)前路徑下會(huì)多出很多文件,我們需要的文件是index.html文件柱告。
image
  1. 點(diǎn)開(kāi)后為如下樣式怀浆,至此幫助文檔生成完畢辜妓。
image

(2)使用IDE工具的方式

  • 使用idea生成javadoc文檔
  1. 打開(kāi) idea,點(diǎn)擊 Tools-> Generate JavaDoc,這樣會(huì)打開(kāi)生成 javadoc 文檔的配置頁(yè)面绊率。
image
  1. 配置javadoc文檔輸出詳情:
    1. 選擇要輸出文檔的范圍促脉,選擇是整個(gè)項(xiàng)目還是模塊還是單個(gè)文件助币。
    2. 文檔要輸出路徑猴蹂。
    3. 選擇哪些類(lèi)型的方法或參數(shù)可以生成文檔。
    4. Locale 選擇地區(qū)窒所,這個(gè)決定了文檔的語(yǔ)言鹉勒,中文就是zh_CN。
    5. 傳入JavaDoc的參數(shù)吵取,一般寫(xiě) -encoding UTF-8 -charset UTF-8禽额,表示編碼格式。
image
  1. 點(diǎn)擊確定海渊,運(yùn)行無(wú)誤后绵疲,打開(kāi)你所選擇的文檔輸出路徑后,選擇index.html臣疑,就是所輸出的javadoc文檔盔憨。
image
image

  • 使用eclipse生成javadoc文檔
  1. 打開(kāi)eclipse,點(diǎn)擊 Project-> Generate JavaDoc讯沈,這樣會(huì)打開(kāi)生成 javadoc 文檔的配置頁(yè)面郁岩。
image
  1. 配置以下javadoc文檔輸出詳情婿奔,后點(diǎn)擊next
    1. 選擇要輸出成文檔的文件或模塊
    2. 選擇哪些類(lèi)型的方法或參數(shù)可以生成文檔
    3. 文檔要輸出路徑。
image
  1. 設(shè)置文檔名后问慎,點(diǎn)擊next
image
  1. 設(shè)置編碼格式 一般寫(xiě)-encoding UTF-8 -charset UTF-8萍摊,設(shè)置jre版本,然后點(diǎn)擊完成如叼,在剛才設(shè)置的輸出路徑中找到index.html即可冰木。
image
  1. 注意點(diǎn):eclipse的默認(rèn)編碼不是UTF-8,所以要將其修改為UTF-8笼恰,修改方法如下:

    打開(kāi)eclipse踊沸,點(diǎn)擊 Window-> Preferences->Workspace,將默認(rèn)的GBK編碼改為UTF-8即可社证。

image
image

image
image
image

更多精彩內(nèi)容敬請(qǐng)關(guān)注微信公眾號(hào):【平兄聊Java】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末逼龟,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子追葡,更是在濱河造成了極大的恐慌腺律,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,185評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件宜肉,死亡現(xiàn)場(chǎng)離奇詭異匀钧,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)崖飘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,445評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)榴捡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)杈女,“玉大人朱浴,你說(shuō)我怎么就攤上這事〈镆” “怎么了翰蠢?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,684評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)啰劲。 經(jīng)常有香客問(wèn)我梁沧,道長(zhǎng),這世上最難降的妖魔是什么蝇裤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,564評(píng)論 1 284
  • 正文 為了忘掉前任廷支,我火速辦了婚禮,結(jié)果婚禮上栓辜,老公的妹妹穿的比我還像新娘恋拍。我一直安慰自己,他們只是感情好藕甩,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,681評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布施敢。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪僵娃。 梳的紋絲不亂的頭發(fā)上概作,一...
    開(kāi)封第一講書(shū)人閱讀 49,874評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音默怨,去河邊找鬼讯榕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛匙睹,可吹牛的內(nèi)容都是我干的瘩扼。 我是一名探鬼主播,決...
    沈念sama閱讀 39,025評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼垃僚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼集绰!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起谆棺,我...
    開(kāi)封第一講書(shū)人閱讀 37,761評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤栽燕,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后改淑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體碍岔,經(jīng)...
    沈念sama閱讀 44,217評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,545評(píng)論 2 327
  • 正文 我和宋清朗相戀三年朵夏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蔼啦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,694評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仰猖,死狀恐怖捏肢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情饥侵,我是刑警寧澤鸵赫,帶...
    沈念sama閱讀 34,351評(píng)論 4 332
  • 正文 年R本政府宣布,位于F島的核電站躏升,受9級(jí)特大地震影響辩棒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜膨疏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,988評(píng)論 3 315
  • 文/蒙蒙 一一睁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧佃却,春花似錦者吁、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,778評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)批销。三九已至,卻和暖如春染坯,著一層夾襖步出監(jiān)牢的瞬間均芽,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,007評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工单鹿, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留掀宋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,427評(píng)論 2 360
  • 正文 我出身青樓仲锄,卻偏偏與公主長(zhǎng)得像劲妙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子儒喊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,580評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容