2018-01-10 java注釋使用技巧

轉(zhuǎn)載:https://zhuanlan.zhihu.com/p/32725482

前言

今天我們來說說如何編寫Java注釋。使用過Java的同學(xué)都非常熟悉尺碰,Java中有:

  • 單行注釋 // 這是單注釋
  • 多行注釋 /*這是多行注釋*/
  • Javadoc注釋 /**這是javadoc注釋*/

其實(shí)這里面還有很多細(xì)節(jié)呢,下面我們一一來揭曉

哪些地方需要添加注釋

首先婶熬,我們需要確定一下为狸,添加注釋的目的是什么?(手動(dòng)思考10秒)荐捻。

我認(rèn)為添加注釋,是為了程序更容易理解與維護(hù)寡夹,特別是維護(hù)处面,更是對(duì)自己代碼負(fù)責(zé)的一種體現(xiàn)。

那基于這樣的目的菩掏,在日常開發(fā)中魂角,我們需要在哪些地方添加注釋呢?

  • 類智绸,接口野揪。

這一部分注釋是必須的。在這里瞧栗,我們需要使用javadoc注釋斯稳,需要標(biāo)明,創(chuàng)建者迹恐,創(chuàng)建時(shí)間挣惰,版本,以及該類的作用殴边。如下所示:

package com.andyqian.utils;

/**
 * @author: andy
 * @date: 18-01-05
 * @version: 1.0.0
 * @description: 生成PDF 工具類
 */
public class PdfUtil {

}

  • 方法

在方法中通熄,我們需要對(duì)入?yún)ⅲ鰠⒄叶迹约胺祷刂担獦?biāo)明廊酣。如下所示:

   /**
     * 生成pdf文件
     * @param htmlContent  待生成pdf的 html內(nèi)容
     * @param file  生成pdf文件地址
     * @see  PdfUtils#getFontPath()
     * @return true 生成成功    false 生成失敗
     */
    public static boolean generatePdf(String htmlContent,File file){
        ...
        return result;
    }

  • 常量

對(duì)常量能耻,我們需要使用多行注釋,進(jìn)行標(biāo)明該常量的用途,如下所示:

/**
 * @author: andy
 * @date: 18-01-05
 * @version: 0.0.1
 * @description:
 */
public class StatusConsts {

    /**
     * 博客地址
     */
    public static final String BLOG="www.andyqian.com";
}

  • 關(guān)鍵算法上

在關(guān)鍵算法上晓猛,添加注釋并且按照順序依次標(biāo)明饿幅,寫明白該方法為什么這么做。如下所示:

/**
     * 應(yīng)用場景:
     * 1.在windows下,使用Thread.currentThread()獲取路徑時(shí),出現(xiàn)空對(duì)象戒职,導(dǎo)致不能使用
     * 2.在linux下,使用PdfUtils.class獲取路徑為null,
     * 獲取字體路徑
     * @return 返回字體路徑
     */
    private static String getFontPath(){
        String path="";
        // 1.
        ClassLoader classLoader= Thread.currentThread().getContextClassLoader();
        URL url = (classLoader==null)?null:classLoader.getResource("/");
        String threadCurrentPath = (url==null)?"":url.getPath();
        // 2\. 如果線程獲取為null,則使用當(dāng)前PdfUtils.class加載路徑
        if(threadCurrentPath==null||"".equals(threadCurrentPath)){
            path = PdfUtils.class.getClass().getResource("/").getPath();
        }
        // 3.拼接字體路徑
        StringBuffer stringBuffer = new StringBuffer(path);
        stringBuffer.append("/fonts/SIMKAI.TTF");
        path = stringBuffer.toString();
        return path;
    }

怎么添加注釋?

1. IDEA 自動(dòng)生成
對(duì)于類中的注釋栗恩,我們可以通過IDEA自動(dòng)生成。
如IDEA 可以通過:File->Settings->Editor->File and Code Templates->Includes->File Header來設(shè)置模板洪燥,這樣新建文件時(shí)磕秤,IDEA會(huì)按照設(shè)置的模板,會(huì)自動(dòng)生成一個(gè)注釋捧韵,就不需要一個(gè)一個(gè)敲了市咆。

<figure style="box-sizing: inherit; margin: 24px 0px; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;">
image

</figure>

其中標(biāo)簽有:
${USER} : 當(dāng)前用戶。
${DATE} : 當(dāng)前日期再来。
${PACKAGE_NAME}:包名蒙兰。
${TIME}: 當(dāng)前時(shí)間。
${YEAR}: 當(dāng)前年芒篷。
${MONTH}:當(dāng)前月搜变。
${DAY}: 當(dāng)前日。
${HOURS}: 當(dāng)前小時(shí)针炉。
${MINUTE}: 當(dāng)前分鐘

  1. 注釋引用

如果方法中引用了其他的方法挠他,在注釋中如何體現(xiàn)呢?細(xì)心的朋友糊识,應(yīng)該已經(jīng)發(fā)現(xiàn)了绩社,在上面的:

   /**
     * 生成pdf文件
     * @param htmlContent  待生成pdf的 html內(nèi)容
     * @param file  生成pdf文件地址
     * @see  PdfUtils#getFontPath()
     * @return true 生成成功    false 生成失敗
     */
    public static boolean generatePdf(String htmlContent,File file){
        ...
        return result;
    }

中的@see就有這個(gè)作用,其語法是:

@see package.class#method  label
@see  #field
@see  #method(Type, Type,...)
@see  #method(Type argname, Type argname,...)
@see  #constructor(Type, Type,...)
@see  #constructor(Type argname, Type argname,...)

例如:

@see  PdfUtils#getFontPath()

如果是同一個(gè)類中赂苗,package(包名全路徑)可以省略愉耙。有相同功能的標(biāo)簽有:
{[@link](http://link.zhihu.com/?target=https%3A//my.oschina.net/u/393) package.class#metod}

   /**
     * 生成pdf文件
     * @return true 生成成功    false 生成失敗
     * @throws  Exception
     * {@link PdfUtils#getFontPath()}
     */
    public static boolean generatePdf(String htmlContent,File file){
        ....
    }

其區(qū)別是:@see必須要在注釋行首,{@link}可以在任意位置拌滋。

  1. 在IDEA中朴沿,我們可以選中方法通過快捷鍵Ctrl+D即可查看我們添加的注釋,如下圖所示:

<figure style="box-sizing: inherit; margin: 24px 0px; color: rgb(51, 51, 51); font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Microsoft YaHei", "Source Han Sans SC", "Noto Sans CJK SC", "WenQuanYi Micro Hei", sans-serif; font-size: medium; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; background-color: rgb(255, 255, 255); text-decoration-style: initial; text-decoration-color: initial;">
image

</figure>

  1. 如果需要引用外網(wǎng)的連接败砂,我們可以通過HTML標(biāo)簽中的a標(biāo)簽來表示赌渣,如下所示:

@see <a >博客地址</a>

以下為javadoc 需要熟知的注釋標(biāo)簽:
@see 引用類/方法。
@author: 作者昌犹。
@date:日期坚芜。
@version: 版本號(hào)。
@throws:異常信息斜姥。
@param:參數(shù)
@return: 方法返回值鸿竖。
@since: 開源項(xiàng)目常用此標(biāo)簽用于創(chuàng)建日期 沧竟。
{@value}: 會(huì)使用該值,常用于常量缚忧。
{@link} 引用類/方法悟泵。
{@linkplain} 與@link功能一致。

完整案例如下:

package com.andyqian.pdf.utils;

import com.itextpdf.text.log.Logger;
import com.itextpdf.text.log.LoggerFactory;

import java.io.File;
import java.net.URL;

/**
 * @author: 鞠騫
 * @date: 18-01-05
 * @version: 1.0.0
 * @description: 生成PDF 工具類
 */
public class PdfUtils {
    private static final Logger logger = LoggerFactory.getLogger(PdfUtils.class);

    /**
     * 生成pdf文件
     * @param htmlContent  待生成pdf的 html內(nèi)容
     * @param file  生成pdf文件地址
     * @see  <a >https://itextpdf.com/</a>
     * @return true 生成成功    false 生成失敗
     */
    public static boolean generatePdf(String htmlContent,File file)throws Exception{
        ...
        return true;
    }

    /**
     * 應(yīng)用場景:
     * 1.在windows下,使用Thread.currentThread()獲取路徑時(shí),出現(xiàn)空對(duì)象闪水,導(dǎo)致不能使用
     * 2.在linux下,使用PdfUtils.class獲取路徑為null,
     * 獲取字體路徑
     * @return 返回字體路徑
     */
    private static String getFontPath(){
        String path="";
        // 1.
        ClassLoader classLoader= Thread.currentThread().getContextClassLoader();
        URL url = (classLoader==null)?null:classLoader.getResource("/");
        String threadCurrentPath = (url==null)?"":url.getPath();
        // 2\. 如果線程獲取為null,則使用當(dāng)前PdfUtils.class加載路徑
        if(threadCurrentPath==null||"".equals(threadCurrentPath)){
            path = PdfUtils.class.getClass().getResource("/").getPath();
        }
        // 3.拼接字體路徑
        StringBuffer stringBuffer = new StringBuffer(path);
        stringBuffer.append("/fonts/SIMKAI.TTF");
        path = stringBuffer.toString();
        return path;
    }
}

添加注釋時(shí)的一點(diǎn)建議

  1. 類中糕非,接口等必須有創(chuàng)建時(shí)間,創(chuàng)建人球榆,版本號(hào)朽肥,描述等注釋。
  2. 注釋不是越多越好芜果,比如:get/set方法就不需要寫注釋鞠呈。更不需要每一行都寫注釋。
  3. 注釋需要寫的簡明易懂右钾。特別是方法的參數(shù)蚁吝,以及返回值。
  4. 每一次修改時(shí)舀射,相應(yīng)的注釋也應(yīng)進(jìn)行同步更新窘茁。
  5. 在類,接口脆烟,方法中山林,應(yīng)該都使用/** */javadoc注釋。因?yàn)檫@樣調(diào)用者就不需要進(jìn)入方法內(nèi)部才知道方法的用處邢羔。提高編碼效率驼抹。
  6. 方法代碼中如果有順序之分,最好將代碼也加上序號(hào)拜鹤,如1框冀,2,3等敏簿。
  7. 枚舉中的每一個(gè)值都需要添加注釋明也。

小結(jié)

寫注釋是一個(gè)好習(xí)慣,能讓自己和團(tuán)隊(duì)都受益惯裕,如果你接手一個(gè)一丁點(diǎn)注釋都沒有的項(xiàng)目温数,那么上一個(gè)程序員就倒霉了(此處省略N個(gè)字),不知你們有沒有看過開源項(xiàng)目的源碼蜻势,那注釋寫的相當(dāng)詳細(xì)撑刺,大家可以多多參考,爭取別做一個(gè)”倒霉”的程序員握玛。
轉(zhuǎn)載:https://zhuanlan.zhihu.com/p/32725482

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末猜煮,一起剝皮案震驚了整個(gè)濱河市次员,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌王带,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件市殷,死亡現(xiàn)場離奇詭異愕撰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)醋寝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門搞挣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人音羞,你說我怎么就攤上這事囱桨。” “怎么了嗅绰?”我有些...
    開封第一講書人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵舍肠,是天一觀的道長。 經(jīng)常有香客問我窘面,道長翠语,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任财边,我火速辦了婚禮肌括,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘酣难。我一直安慰自己谍夭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開白布憨募。 她就那樣靜靜地躺著紧索,像睡著了一般。 火紅的嫁衣襯著肌膚如雪馋嗜。 梳的紋絲不亂的頭發(fā)上齐板,一...
    開封第一講書人閱讀 51,610評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音葛菇,去河邊找鬼甘磨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛眯停,可吹牛的內(nèi)容都是我干的济舆。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼莺债,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼滋觉!你這毒婦竟也來了签夭?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤椎侠,失蹤者是張志新(化名)和其女友劉穎第租,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體我纪,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡慎宾,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浅悉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趟据。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖术健,靈堂內(nèi)的尸體忽然破棺而出汹碱,到底是詐尸還是另有隱情,我是刑警寧澤荞估,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布咳促,位于F島的核電站,受9級(jí)特大地震影響泼舱,放射性物質(zhì)發(fā)生泄漏等缀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一娇昙、第九天 我趴在偏房一處隱蔽的房頂上張望尺迂。 院中可真熱鬧,春花似錦冒掌、人聲如沸噪裕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膳音。三九已至,卻和暖如春铃诬,著一層夾襖步出監(jiān)牢的瞬間祭陷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來泰國打工趣席, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留兵志,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓宣肚,卻偏偏與公主長得像想罕,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子霉涨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355