企業(yè)站seo點擊軟件太原網絡推廣價格
目錄
1.注解定義
2.元注解定義
3. 自定義注解(自定義的注解名稱相同的會覆蓋原注解)
4.Annotation架構(元注解參數(shù)介紹)
1.注解定義
? ? ? ? 注解是用來將任何的信息或元數(shù)據(jù)(metadata)與程序元素(類、方法、成員變量等)進行關聯(lián)。是一種說明、配置、描述性的信息,與具體業(yè)務無關,也不會影響正常的業(yè)務邏輯。注解在Java程序中是作為標記的作用,有特定的程序來發(fā)現(xiàn)標記
2.元注解定義
????????元注解是專門用來注解其他注解的注解,聽起來有些繞口,實際上就是專門為自定義注解提供的注解。java.lang.annotation提供了四種元注解:
- @Documented – 注解是否將包含在JavaDoc中
- @Retention – 什么時候使用該注解
- @Target – 注解用于什么地方
- @Inherited – 是否允許子類繼承該注解
- @Repeatable - 是否可重復注解,jdk1.8引入
3. 自定義注解(自定義的注解名稱相同的會覆蓋原注解)
新建一個注解類?
@Documented//說明該注解能出現(xiàn)在 javadoc 中@Target(ElementType.TYPE)//指定 Inherited 的類型是 ElementType.TYPE。@Retention(RetentionPolicy.RUNTIME)//指定 Inherited 的策略是RetentionPolicy.RUNTIME@Inherited//它所標注的Annotation將具有繼承性。 public @interface MyAnnotation1 { }
4.Annotation架構(元注解參數(shù)介紹)
?
?
????????①、(01) 1 個 Annotation 和 1 個 RetentionPolicy 關聯(lián)??梢岳斫鉃?#xff1a;每1個Annotation對象,都會有唯一的RetentionPolicy屬性。
???????????????(02) 1 個 Annotation 和 1~n 個 ElementType 關聯(lián)。可以理解為:對于每 1 個 Annotation 對象,可以有若干個 ElementType 屬性。
? ? ? ? ? ? ? ?(03) Annotation 有許多實現(xiàn)類,包括:Deprecated, Documented, Inherited, Override 等等。Annotation 的每一個實現(xiàn)類,都 "和 1 個 RetentionPolicy 關聯(lián)" 并且 " 和 1~n 個 ElementType 關聯(lián)"。
? ? ? ? ②、Annotation 就是個接口。
"每 1 個 Annotation" 都與 "1 個 RetentionPolicy" 關聯(lián),并且與 "1~n 個 ElementType" 關聯(lián)。可以通俗的理解為:每 1 個 Annotation 對象,都會有唯一的 RetentionPolicy 屬性;至于 ElementType 屬性,則有 1~n 個。
? ? ? ? ③、ElementType 是 Enum 枚舉類型,它用來指定 Annotation 的類型。
"每 1 個 Annotation" 都與 "1~n 個 ElementType" 關聯(lián)。當 Annotation 與某個 ElementType 關聯(lián)時,就意味著:Annotation有了某種用途。
- ElementType.TYPE: 類、接口、注解、enum
- ElementType.CONSTRUCTOR: 構造函數(shù)
- ElementType.FIELD: 成員變量、對象、屬性、枚舉的常量
- ElementType.LOCAL_VARIABLE: 局部變量
- ElementType.METHOD: 方法
- ElementType.PACKAGE: 包
- ElementType.PARAMETER: 參數(shù)
- ElementType.ANNOTATION_TYPE): 注解
- ElementType.TYPE_PARAMETER:類型參數(shù),表示這個注解可以用在 Type的聲明式前,jdk1.8引入。
- ElementType.TYPE_USE:類型的注解,表示這個注解可以用在所有使用Type的地方(如:泛型,類型轉換等),jdk1.8引入。
? ? ? ? ④、RetentionPolicy 是 Enum 枚舉類型,它用來指定 Annotation 的策略(類型)。通俗點說,就是不同 RetentionPolicy 類型的 Annotation 的作用域不同。
? ? ? ? ? ? ? ? a、若 Annotation 的類型為 SOURCE,則意味著:Annotation 僅存在于編譯器處理期間,編譯器處理完之后,該 Annotation 就沒用了。 例如," @Override" 標志就是一個 Annotation。當它修飾一個方法的時候,就意味著該方法覆蓋父類的方法;并且在編譯期間會進行語法檢查!編譯器處理完后,"@Override" 就沒有任何作用了。
? ? ? ? ? ? ? ? b、若 Annotation 的類型為 CLASS,則意味著:編譯器將 Annotation 存儲于類對應的 .class 文件中,它是 Annotation 的默認行為。
? ? ? ? ? ? ? ? c、若 Annotation 的類型為 RUNTIME,則意味著:編譯器將 Annotation 存儲于 class