用大白話聊聊JavaSE -- 自定義注解入門

注解在JavaSE中算是比較高級的一種用法了,為什么要學(xué)習(xí)注解尊浪,我想大概有以下幾個原因:

1. 可以更深層次地學(xué)習(xí)Java匣屡,理解Java的思想.

2. 有了注解的基礎(chǔ)涩拙,能夠方便閱讀各種框架的源碼,比如hibernate耸采,SpringMVC等等兴泥。里面就用到了大量的注解。即便無法閱讀源碼虾宇,以后使用這些框架搓彻,會有一種心理上的安全感

3. 方便今后跟別人吹牛嘱朽。(當(dāng)然旭贬,這也很重要。)

好了搪泳,話不多說稀轨,我們開始吧。

1. 從注釋的角度來理解注解

我想了很久岸军,最終決定以這個小標(biāo)題作為第一節(jié)的標(biāo)題奋刽,我們在編寫Java代碼的時候,為了讓我們的代碼看起來通俗易懂艰赞,就會加上注釋信息佣谐。

比如,我們寫一個方法方妖,會標(biāo)注上這個方法的作者狭魂,作用,版本等信息党觅。是的雌澄,作為一個程序員,編寫優(yōu)雅的注釋是一個非常重要的好習(xí)慣杯瞻。

例:

/**
 * 用于判斷是否是空字符串
 * 方法名:isEmpty
 * 創(chuàng)建人:剽悍一小兔
 * 時間:2016年9月21日-下午6:56:33
 * @param str
 * @return boolean
 */
public static boolean isEmpty(String str) {
    return null == str  || str.equals("")
            || str.matches("\\s*");
}

這是一個字符串判空的函數(shù)镐牺,函數(shù)名為isEmpty,雖然看名字大概也能猜到它的作用又兵,可是任柜,一旦加上了注釋卒废,瞬間就變得更加清晰了沛厨,不是嗎?

這種注釋摔认,當(dāng)代碼被執(zhí)行的時候逆皮,執(zhí)行機制會自動忽略掉他們,因為這些文字其實是給程序員看的参袱,而不是給執(zhí)行機制看的电谣。

寫注釋是一種美德秽梅。

那么,注解又是什么呢剿牺?

我個人對它的看法是:所謂的注解企垦,就是寫給電腦看的高級注釋。

你可能經(jīng)常會看到代碼里面出現(xiàn)@XXX的標(biāo)志晒来,乍一看感覺挺高深的钞诡。反正我當(dāng)年就是這種感覺,頭腦里第一個反應(yīng)就是這肯定很難湃崩!

我還是那句話荧降,如果你總想著復(fù)雜,那么就永遠(yuǎn)看不到簡單攒读。

我們寫注釋朵诫,是給人看的,而注解就是寫給電腦看的薄扁。就這么簡單剪返。

這么說可能有點抽象,沒關(guān)系邓梅,我們來一個快速入門吧随夸。

2.提出問題

新建一個Java項目

Paste_Image.png

項目名稱就叫做Annotation吧


Paste_Image.png

在src旁邊右鍵,新建一個util包震放,也就是工具包宾毒。

Paste_Image.png

弄一個專門處理日期的工具類


Paste_Image.png

隨便寫一個日期格式化的方法。

package util;

import java.util.Date;
import java.text.SimpleDateFormat;

public class DateUtil {
    
    public static String formatDate( Date date , String formatPattern ){
        return new SimpleDateFormat(formatPattern).format(date);
    }
    
}

注意殿遂,導(dǎo)包的時候要是java.util.Date;诈铛,而不是java.sql.Date;

測試:

Date now = new Date();//獲取當(dāng)前日期
System.out.println(now);
System.out.println(formatDate(now,"yyyy-MM-dd hh:mm:ss"));

控制臺打印:
Wed Sep 21 19:24:57 CST 2016
2016-09-21 07:24:57

這說明墨礁,我們寫的方法應(yīng)該是正確的幢竹。

很好,那么接下來要解決一個什么問題呢恩静?就是說焕毫,如果我想通過代碼來獲取關(guān)于這個方法的信息,那么該如何做呢驶乾?

寫注釋肯定是不行的邑飒,因為注釋是寫個程序員看的,電腦看不懂级乐,更別提獲取注釋的內(nèi)容了疙咸,是吧?

于是风科,注解撒轮,這一種高級的注釋就出現(xiàn)了乞旦。

3.編寫注解

關(guān)于注解,要明確三個問題:

  1. 要給誰加注解疤馍健兰粉?
  2. 什么時候注解起作用啊顶瞳?
  3. 要注解那些東西呢亲桦?

因為是快速入門莽鸿,所以大概知道這些就足夠了窿祥。

現(xiàn)在蜂奸,我們來新建一個注解鸠窗,毫無疑問愚墓,所謂的注解冲甘,它還是一個Java類碗硬,你不要被它嚇到吝秕。

新建一個注解包洲劣。


Paste_Image.png

new一個Annotation备蚓,就叫MethodNote,意思就是說囱稽,這個是加在方法上的郊尝,為了給方法加一些電腦能看得懂的說明。

Paste_Image.png

第一個問題是要給誰加注解罢骄流昏?那么,這個注解類是需要加在方法上的吞获,于是就這樣寫:

Paste_Image.png

這就表示况凉,該注解要加在方法上。

接下來各拷,讓我們來明確第二個問題:什么時候注解起作用暗笕蕖?

我們希望在程序運行的時候烤黍,注解發(fā)揮作用知市,就是說,當(dāng)你的程序跑起來了速蕊,電腦才開始閱讀這些注解嫂丙。

Paste_Image.png

這句話的意思就是說,我這個注解啊互例,是在程序跑起來的時候奢入,RUNTIME嘛,就是跑起來的時候媳叨,才發(fā)揮作用的腥光。

非常好,那么最后一個問題:要注解那些東西呢糊秆?

一個方法武福,最重要的信息包括:作用,創(chuàng)建時間痘番,作者捉片,版本,返回值等等汞舱。我們隨便抽取幾個伍纫,就作用和創(chuàng)建時間吧!

Paste_Image.png

這種寫法有點類似于寫接口的方法昂芜。

好了莹规,我們的第一個注解就編寫完成了!寫好了就馬上用唄泌神,現(xiàn)在我們給日期格式化的方法加上咱自己編寫的注解良漱。

@MethodNote(createTime = "2016-9-21")
public static String formatDate(Date date , String formatPattern){
    return new SimpleDateFormat(formatPattern).format(date);
}

這就是所謂的注解,其實也很簡單的吧欢际。就是這么來的母市,它歸根到底還是一個Java類。

4.通過Java反射獲取方法的注解信息

好了损趋,回到正題患久,我們已經(jīng)對formatDate方法進(jìn)行了注解,那么浑槽,既然這個注解是寫給電腦看的墙杯,那么電腦就肯定有辦法在其他Java類中獲得這些信息,對吧括荡?

如何獲得呢高镐,對了,用反射機制畸冲。

上代碼:

public static void main(String[] args) throws NoSuchMethodException, SecurityException {

    Class classOfDateUtil = DateUtil.class;
    Method formatDate = classOfDateUtil.getMethod("formatDate", Date.class,String.class);
    MethodNote methodNote = formatDate.getAnnotation(MethodNote.class);

    System.out.println("方法描述:" + methodNote.description());
    System.out.println("創(chuàng)建日期:" + methodNote.createTime());
}

結(jié)果:

方法描述:作者很懶嫉髓,沒有寫本方法的作用。
創(chuàng)建日期:2016-9-21

本章結(jié)束 ...

本章對Java自定義注解做了一個快速入門邑闲,希望對你有所幫助算行。

免責(zé)聲明: 博客中所有的圖片素材均來自百度搜索,僅供學(xué)習(xí)交流苫耸,如有問題請聯(lián)系我州邢,侵立刪,謝謝褪子。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末量淌,一起剝皮案震驚了整個濱河市骗村,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呀枢,老刑警劉巖胚股,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異裙秋,居然都是意外死亡琅拌,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門摘刑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來进宝,“玉大人,你說我怎么就攤上這事枷恕〉辰” “怎么了?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵活尊,是天一觀的道長隶校。 經(jīng)常有香客問我,道長蛹锰,這世上最難降的妖魔是什么深胳? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮铜犬,結(jié)果婚禮上舞终,老公的妹妹穿的比我還像新娘。我一直安慰自己癣猾,他們只是感情好敛劝,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著纷宇,像睡著了一般夸盟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上像捶,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天上陕,我揣著相機與錄音,去河邊找鬼拓春。 笑死释簿,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的硼莽。 我是一名探鬼主播庶溶,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了偏螺?” 一聲冷哼從身側(cè)響起行疏,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎砖茸,沒想到半個月后隘擎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體殴穴,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡凉夯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了采幌。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片劲够。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖休傍,靈堂內(nèi)的尸體忽然破棺而出征绎,到底是詐尸還是另有隱情,我是刑警寧澤磨取,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布人柿,位于F島的核電站,受9級特大地震影響忙厌,放射性物質(zhì)發(fā)生泄漏凫岖。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一逢净、第九天 我趴在偏房一處隱蔽的房頂上張望哥放。 院中可真熱鬧,春花似錦爹土、人聲如沸甥雕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽社露。三九已至,卻和暖如春琼娘,著一層夾襖步出監(jiān)牢的瞬間峭弟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工轨奄, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留孟害,地道東北人。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓挪拟,卻偏偏與公主長得像挨务,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理谎柄,服務(wù)發(fā)現(xiàn)丁侄,斷路器,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,071評論 25 707
  • 似乎是一不留神 月亮掛上了枝頭 皎皎的月色下 只有我孤單凝望 我是有在此刻想起了你 ——寶兒 就像某天突然想起仰望...
    散夏無淚閱讀 302評論 0 2
  • 今天一件小事觸發(fā)了我家孩子爸爸一段感慨:養(yǎng)孩子能讓我們自己成長啊鸿摇。 聽他這么說我覺得自己也蠻有成就感的,同時覺得教...
    大逸閱讀 465評論 3 1
  • 當(dāng)美國知名樂隊林肯公園(Linkin Park)主唱查斯特·班寧頓(Chester Bennington)在洛杉磯...
    0b3e38c2736e閱讀 646評論 0 0