Java註解基礎概念總結

來源:互聯網
上載者:User

標籤:ack   and   copyto   聲明   調用   擷取   war   生命週期   type   

註解的概念

註解(Annotation),也叫中繼資料(Metadata),是Java5的新特性,JDK5引入了Metadata很容易的就能夠調用Annotations。註解與類、介面、枚舉在同一個層次,並可以應用於包、類型、構造方法、方法、成員變數、參數、本地變數的聲明中,用來對這些元素進行說明注釋。

 

註解的文法與定義形式

(1)以@interface關鍵字定義
(2)註解包含成員,成員以無參數的方法的形式被聲明。其方法名和傳回值定義了該成員的名字和類型。
(3)成員賦值是通過@Annotation(name=value)的形式。
(4)註解需要標明註解的生命週期,註解的修飾目標等資訊,這些資訊是通過元註解實現。

以 Java.lang.annotation 中定義的 Target 註解來說明:

 

 

[java] view plain copy
  1. @Retention(value = RetentionPolicy.RUNTIME)  
  2. @Target(value = { ElementType.ANNOTATION_TYPE } )  
  3. public @interface Target {  
  4.     ElementType[] value();  
  5. }  

源碼分析如下:
第一:元註解@Retention,成員value的值為RetentionPolicy.RUNTIME。
第二:元註解@Target,成員value是個數組,用{}形式賦值,值為ElementType.ANNOTATION_TYPE
第三:成員名稱為value,類型為ElementType[]
另外,需要注意一下,如果成員名稱是value,在賦值過程中可以簡寫。如果成員類型為數組,但是只賦值一個元素,則也可以簡寫。如上面的簡寫形式為:

 

[java] view plain copy
  1. @Retention(RetentionPolicy.RUNTIME)  
  2. @Target(ElementType.ANNOTATION_TYPE)  
  3. public @interface Target {  
  4.     ElementType[] value();  
  5. }  

註解的分類

註解的分類有兩種分法:

第一種分法

1、基本內建註解,是指Java內建的幾個Annotation,如@Override、Deprecated、@SuppressWarnings等;

2、元註解(meta-annotation),是指負責註解其他註解的註解,JDK 1.5及以後版本定義了4個標準的元註解類型,如下:

  • @Target
  • @Retention
  • @Documented
  • @Inherited

3、自訂註解,根據需要可以自訂註解,自訂註解需要用到上面的meta-annotation

第二種分法

註解需要標明註解的生命週期,這些資訊是通過元註解 @Retention 實現,註解的值是 enum 類型的 RetentionPolicy,包括以下幾種情況:

[java] view plain copy
  1. public enum RetentionPolicy {  
  2.     /** 
  3.      * 註解只保留在源檔案,當Java檔案編譯成class檔案的時候,註解被遺棄. 
  4.      * 這意味著:Annotation僅存在於編譯器處理期間,編譯器處理完之後,該Annotation就沒用了 
  5.      */  
  6.     SOURCE,  
  7.   
  8.     /** 
  9.      * 註解被保留到class檔案,但jvm載入class檔案時候被遺棄,這是預設的生命週期. 
  10.      */  
  11.     CLASS,  
  12.   
  13.     /** 
  14.      * 註解不僅被儲存到class檔案中,jvm載入class檔案之後,仍然存在, 
  15.      * 儲存到class對象中,可以通過反射來擷取 
  16.      */  
  17.     RUNTIME  
  18. }  

元註解

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

@Documented:標記註解,用於描述其它類型的註解應該被作為被標註的程式成員的公用API,因此可以被例如javadoc此類的工具文檔化。

[java] view plain copy
  1. @Documented  
  2. @Retention(RetentionPolicy.RUNTIME)  
  3. @Target(ElementType.ANNOTATION_TYPE)  
  4. public @interface Documented {  
  5. }  

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

[java] view plain copy
  1. @Documented  
  2. @Retention(RetentionPolicy.RUNTIME)  
  3. @Target(ElementType.ANNOTATION_TYPE)  
  4. public @interface Inherited {  
  5. }  

@Retention:指Annotation被保留的時間長短,標明註解的生命週期,3種RetentionPolicy取值含義上面以說明

 

[java] view plain copy
  1. @Documented  
  2. @Retention(RetentionPolicy.RUNTIME)  
  3. @Target(ElementType.ANNOTATION_TYPE)  
  4. public @interface Retention {  
  5.     RetentionPolicy value();  
  6. }  

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

 

[java] view plain copy
    1. @Documented  
    2. @Retention(RetentionPolicy.RUNTIME)  
    3. @Target(ElementType.ANNOTATION_TYPE)  
    4. public @interface Target {  
    5.     ElementType[] value();  
    6. }  
    7.   
    8. // ElementType取值  
    9. public enum ElementType {  
    10.     /** 類、介面(包括註解類型)或枚舉 */  
    11.     TYPE,  
    12.     /** field屬性,也包括enum常量使用的註解 */  
    13.     FIELD,  
    14.     /** 方法 */  
    15.     METHOD,  
    16.     /** 參數 */  
    17.     PARAMETER,  
    18.     /** 建構函式 */  
    19.     CONSTRUCTOR,  
    20.     /** 局部變數 */  
    21.     LOCAL_VARIABLE,  
    22.     /** 註解上使用的元註解 */  
    23.     ANNOTATION_TYPE,  
    24.     /** 包 */  
    25.     PACKAGE  

Java註解基礎概念總結

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.