Annontation是Java5開始引入的新特徵。中文名稱通常叫註解。java
它提供了一種安全的相似註釋的機制,用來將任何的信息或元數據(metadata)與程序元素(類、方法、成員變量等)進行關聯。安全
更通俗的意思是爲程序的元素(類、方法、成員變量)加上更直觀更明瞭的說明,這些說明信息是與程序的業務邏輯無關,而且是供指定的工具或框架使用的。框架
Annontation像一種修飾符同樣,應用於包、類型、構造方法、方法、成員變量、參數及本地變量的聲明語句中。ide
@Override: 只能用在方法之上的,用來告訴別人這一個方法是改寫父類的。
@Deprecated: 建議別人不要使用舊的API的時候用的,編譯的時候會用產生警告信息,能夠設定在程序裏的全部的元素上。
@SuppressWarnings:這一個類型能夠來暫時把一些警告信息消息關閉。函數
package annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; //做用範圍 @Target(ElementType.TYPE) //RetentionPolicy.RUNTIME這種類型的Annotations將被JVM保留,因此他們能在運行時被JVM或其餘使用反射 @Retention(RetentionPolicy.RUNTIME) //註解doc文檔信息 @Documented public @interface Description { String value(); }
@interface是一個關鍵字,在設計annotations的時候必須把一 個類型定義爲@interface,而不能用class或interface關鍵字。工具
@Target裏面的ElementType是用來指定Annotation類型能夠用在哪一些元素上測試
①TYPE(類型 TYPE(類型)是指能夠用在Class,Interface,Enum和Annotation類型上)spa
②FIELD(應用在屬性) .net
③METHOD(應用在方法)設計
④PARAMETER(應用在參數)
⑤CONSTRUCTOR(應用在構造函數)
⑥LOCAL_VARIABLE(應用在局部變量)
⑦ANNOTATION_TYPE(應用在註解)
⑧PACKAGE(應用在包)
注:若是Annotation類中沒有加@Target註解,則默承認以做用在以上全部。
此註解意義就是指定註解的應用範圍。
@Retention(保留)註解說明,這種類型的註解會被保留到哪一個階段. 有三個值:
①RetentionPolicy.SOURCE —— 這種類型的Annotations只在源代碼級別保留,編譯時就會被忽略
②RetentionPolicy.CLASS —— 這種類型的Annotations編譯時被保留,在class文件中存在,但JVM將會忽略
③RetentionPolicy.RUNTIME —— 這種類型的Annotations將被JVM保留,因此他們能在運行時被JVM或其餘使用反射機制的代碼所讀取和使用
通常默認設置爲: @Retention(RetentionPolicy.RUNTIME) ,這樣在程序運行時候就能發現到這個註解。
@Documented 註解代表這個註解應該被 javadoc工具記錄.
默認狀況下,javadoc是不包括註解的,但若是聲明註解時指定了 @Documented,則它會被 javadoc 之類的工具處理, 因此註解類型信息也會被包括在生成的文檔中。
例如:
一、寫註解類
@Target(ElementType.METHOD) // RetentionPolicy.RUNTIME —— 這種類型的Annotations將被JVM保留,因此他們能在運行時被JVM或其餘使用反射 @Retention(RetentionPolicy.RUNTIME) // 註解doc文檔信息 @Documented() public @interface UseDocumented { String Document(); }
二、寫應用類
public class UseAnnotations { public static void main(String arg[]) { new UseAnnotations().doSomeRetention(); new UseAnnotations().doSomeDocumented(); } @UseDocumented(Document = "保留註解信息測試") public void doSomeRetention() { System.out.printf("測試註解類型 'Retention'"); } @UseDocumented(Document = "Hello document") public void doSomeDocumented() { System.out.printf("測試註解類型 'Documented'"); } }
三、生成doc,查看顯示效果