Java注解基礎概念總結

http://blog.csdn.net/github_35180164/article/details/52107204

注解的概念
注解(Annotation)特石,也叫元數(shù)據(jù)(Metadata),是Java5的新特性鳖链,JDK5引入了Metadata很容易的就能夠調用Annotations姆蘸。注解與類、接口、枚舉在同一個層次逞敷,并可以應用于包狂秦、類型、構造方法推捐、方法裂问、成員變量、參數(shù)牛柒、本地變量的聲明中堪簿,用來對這些元素進行說明注釋。

注解的語法與定義形式
(1)以@interface關鍵字定義(2)注解包含成員皮壁,成員以無參數(shù)的方法的形式被聲明戴甩。其方法名和返回值定義了該成員的名字和類型。(3)成員賦值是通過@Annotation(name=value)的形式闪彼。(4)注解需要標明注解的生命周期甜孤,注解的修飾目標等信息,這些信息是通過元注解實現(xiàn)畏腕。
Java.lang.annotation 中定義的 **Target **注解來說明:

@Retention(value = RetentionPolicy.RUNTIME)  
@Target(value = { ElementType.ANNOTATION_TYPE } )  
public @interface Target {  
    ElementType[] value();  
}  

源碼分析如下:第一:元注解@Retention缴川,成員value的值為RetentionPolicy.RUNTIME。第二:元注解@Target描馅,成員value是個數(shù)組把夸,用{}形式賦值,值為ElementType.ANNOTATION_TYPE第三:成員名稱為value铭污,類型為ElementType[]另外恋日,需要注意一下,如果成員名稱是value嘹狞,在賦值過程中可以簡寫岂膳。如果成員類型為數(shù)組,但是只賦值一個元素磅网,則也可以簡寫谈截。如上面的簡寫形式為:

@Retention(RetentionPolicy.RUNTIME)  
@Target(ElementType.ANNOTATION_TYPE)  
public @interface Target {  
    ElementType[] value();  
} 

注解的分類
注解的分類有兩種分法:
第一種分法
1、基本內置注解涧偷,是指Java自帶的幾個Annotation簸喂,如@Override、Deprecated燎潮、@SuppressWarnings等喻鳄;
2、元注解(meta-annotation)确封,是指負責注解其他注解的注解除呵,JDK 1.5及以后版本定義了4個標準的元注解類型唉锌,如下:
@Target
@Retention
@Documented
@Inherited

3、自定義注解竿奏,根據(jù)需要可以自定義注解袄简,自定義注解需要用到上面的meta-annotation
第二種分法
注解需要標明注解的生命周期,這些信息是通過元注解 @Retention 實現(xiàn)泛啸,注解的值是 **enum **類型的 RetentionPolicy绿语,包括以下幾種情況:

public enum RetentionPolicy {  
    /** 
     * 注解只保留在源文件,當Java文件編譯成class文件的時候候址,注解被遺棄. 
     * 這意味著:Annotation僅存在于編譯器處理期間吕粹,編譯器處理完之后舟奠,該Annotation就沒用了 
     */  
    SOURCE,  
  
    /** 
     * 注解被保留到class文件尔破,但jvm加載class文件時候被遺棄溜宽,這是默認的生命周期. 
     */  
    CLASS,  
  
    /** 
     * 注解不僅被保存到class文件中轧简,jvm加載class文件之后,仍然存在拣帽, 
     * 保存到class對象中践瓷,可以通過反射來獲取 
     */  
    RUNTIME  
}  

元注解
如上所介紹的Java定義了4個標準的元注解:

@Documented:標記注解耕驰,用于描述其它類型的注解應該被作為被標注的程序成員的公共API炸卑,因此可以被例如javadoc此類的工具文檔化既鞠。

@Documented  
@Retention(RetentionPolicy.RUNTIME)  
@Target(ElementType.ANNOTATION_TYPE)  
public @interface Documented {  
}  

@Inherited:標記注解,允許子類繼承父類的注解

@Documented  
@Retention(RetentionPolicy.RUNTIME)  
@Target(ElementType.ANNOTATION_TYPE)  
public @interface Inherited {  
} 

@Retention:指Annotation被保留的時間長短盖文,標明注解的生命周期嘱蛋,3種**RetentionPolicy**取值含義上面以說明

@Documented  
@Retention(RetentionPolicy.RUNTIME)  
@Target(ElementType.ANNOTATION_TYPE)  
public @interface Retention {  
    RetentionPolicy value();  
}  

@Target:標明注解的修飾目標,共有

@Documented  
@Retention(RetentionPolicy.RUNTIME)  
@Target(ElementType.ANNOTATION_TYPE)  
public @interface Target {  
    ElementType[] value();  
}  
  
// ElementType取值  
public enum ElementType {  
    /** 類五续、接口(包括注解類型)或枚舉 */  
    TYPE,  
    /** field屬性洒敏,也包括enum常量使用的注解 */  
    FIELD,  
    /** 方法 */  
    METHOD,  
    /** 參數(shù) */  
    PARAMETER,  
    /** 構造函數(shù) */  
    CONSTRUCTOR,  
    /** 局部變量 */  
    LOCAL_VARIABLE,  
    /** 注解上使用的元注解 */  
    ANNOTATION_TYPE,  
    /** 包 */  
    PACKAGE  
} 
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市疙驾,隨后出現(xiàn)的幾起案子凶伙,更是在濱河造成了極大的恐慌,老刑警劉巖荆萤,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件镊靴,死亡現(xiàn)場離奇詭異铣卡,居然都是意外死亡链韭,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門煮落,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敞峭,“玉大人,你說我怎么就攤上這事蝉仇⌒铮” “怎么了殖蚕?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沉迹。 經(jīng)常有香客問我睦疫,道長,這世上最難降的妖魔是什么鞭呕? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任蛤育,我火速辦了婚禮,結果婚禮上葫松,老公的妹妹穿的比我還像新娘瓦糕。我一直安慰自己,他們只是感情好腋么,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布咕娄。 她就那樣靜靜地躺著,像睡著了一般珊擂。 火紅的嫁衣襯著肌膚如雪圣勒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天摧扇,我揣著相機與錄音灾而,去河邊找鬼。 笑死扳剿,一個胖子當著我的面吹牛旁趟,可吹牛的內容都是我干的。 我是一名探鬼主播庇绽,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼锡搜,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瞧掺?” 一聲冷哼從身側響起耕餐,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎辟狈,沒想到半個月后肠缔,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡哼转,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年明未,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片壹蔓。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡趟妥,死狀恐怖,靈堂內的尸體忽然破棺而出佣蓉,到底是詐尸還是另有隱情披摄,我是刑警寧澤亲雪,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站疚膊,受9級特大地震影響义辕,放射性物質發(fā)生泄漏。R本人自食惡果不足惜寓盗,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一终息、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贞让,春花似錦周崭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至销部,卻和暖如春摸航,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舅桩。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工酱虎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人擂涛。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓读串,卻偏偏與公主長得像,于是被迫代替她去往敵國和親撒妈。 傳聞我的和親對象是個殘疾皇子恢暖,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內容

  • 什么是注解(Annotation):Annotation(注解)就是Java提供了一種元程序中的元素關聯(lián)任何信息和...
    九尾喵的薛定諤閱讀 3,144評論 0 2
  • 本文章涉及代碼已放到github上annotation-study 1.Annotation為何而來 What:A...
    zlcook閱讀 29,120評論 15 116
  • 注解 創(chuàng)建注解 下面代碼創(chuàng)建了一個名為MyAnno的注解,有兩個成員str和val狰右。@Retention(…)注解...
    kylinxiang閱讀 3,617評論 0 2
  • 1杰捂、概述 Annotation(注解)是JDK5.0及以后版本引入的。它用來修飾編程元素棋蚌,如:包嫁佳、類、構造方法谷暮、方...
    M_JCs閱讀 630評論 0 0
  • 你斜臥在湖邊的石頭上蒿往, 桂樹為你撐傘,鳥兒為你歡唱坷备, 連近旁的湖畔也來為你獻殷勤熄浓, 清水,...
    夜行俠de印記閱讀 280評論 2 0