1)自定義註解:java
1)定義註解: 語法:public [@interface](https://my.oschina.net/u/996807) 註解名{} 舉例: public [@interface](https://my.oschina.net/u/996807) MyAnnotation{ String name() default "jack"; } 2)定義註解的屬性: 語法: 類型 屬性名(); 類型 屬性名() default 默認值; 賦值: 說明:在使用時,進行賦值。 舉例:@MyAnnotation(name="hello") 特殊屬性value: 類型 value(); 只給value設值: @MyAnnotation(value="hello") 或 @MyAnnotation("hello") 給多個屬性設值:@MyAnnotation(value="hello",name="aaa") 類型[] value(); 只給value設值: @MyAnnotation(value={"a","b"}) 或 @MyAnnotation({"a","b"}) 或 @MyAnnotation({"a"}) 或 @MyAnnotation("a") 給多個屬性設值:同上。 注意:註解的屬性的類型只能是:基本類型、String、Class、枚舉、註解類型 和 這些類型的一維數組。
2)元註解:數組
1)概念:加在註解上的註解。 2)經常使用的元註解: @Retention:註解的保留範圍 RetentionPolicy.SOURCE: 註解存在於源文件中 RetentionPolicy.CLASS: 註解存在於字節碼文件中 RetentionPolicy.RUNTIME: 註解存在於運行時 @Target:註解出現的位置 eg:@Target(ElementType.METHOD) @Target({ElementType.FIELD,ElementType.METHOD}) @Inherited: 被該元註解修飾的Annotation類將具備繼承性,若是某個類使用了被@Inherited修飾的Annotation, 則該類的子類會自動加上這個被@Inherited修飾的Annotation。 @Documented: 被該元註解修飾的Annotation類將被javadoc工具提取成文檔。
3)註解處理器相關API:工具
1)java.lang.annotation.Annotation: 說明:該接口是全部註解類的父接口。 2)java.lang.reflect.AnnotatedElement: 概念:表示一個正在VM中運行而且被註解修飾的元素(類、方法、字段等),該接口容許經過反射的方式來讀取元素上的註解。 實現類:java.lang.reflect包下的:Class、Constructor、Method、Field、Package 說明:該接口中的方法返回的全部註解都是不可變的。 該接口中的方法: 1>getAnnotation(clazz) <T extends Annotation> T getAnnotation(Class<T> annotationClass): 說明:若是該元素被指定類型的註解所修飾,則返回該註解,不然返回null。 2>getAnnotations() Annotation[] getAnnotations() 說明:返回此元素上全部的註解。 3>getDeclaredAnnotations() Annotation[] getDeclaredAnnotations() 說明:返回直接在該元素上修飾的全部的註解,該方法會忽略掉從父類繼承過來的註解。 4>isAnnotationPresent(clazz) boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) 說明:判斷該元素是否被指定類型的註解修飾。