天天看點

注解(Annotation)入門

1.@Target,

作用:用于描述注解的使用範圍(即:被描述的注解可以用在什麼地方)

  取值(ElementType)有:

    1.CONSTRUCTOR:用于描述構造器

    2.FIELD:用于描述域

    3.LOCAL_VARIABLE:用于描述局部變量

    4.METHOD:用于描述方法

    5.PACKAGE:用于描述包

    6.PARAMETER:用于描述參數

    7.TYPE:用于描述類、接口(包括注解類型) 或enum聲明

2.@Retention

          該注解描述了作用範圍

               1. java             RetentionPolicy.SOURCE

                2.java+class       RetentionPolicy.CLASS

                3. java+class+jvm   RetentionPolicy.RUNTIME

  3.@Documented用于描述其它類型的annotation應該被作為被标注的程式成員的公共API,是以可以被例如javadoc此類的工具文檔化。Documented是一個标記注解,沒有成員。

  4.@Inherited 元注解是一個标記注解,@Inherited闡述了某個被标注的類型是被繼承的。如果一個使用了@Inherited修飾的annotation類型被用于一個class,則這個annotation将被用于該class的子類。

  注意:@Inherited annotation類型是被标注過的class的子類所繼承。類并不從它所實作的接口繼承annotation,方法并不從它所重載的方法繼承annotation。

  當@Inherited annotation類型标注的annotation的Retention是RetentionPolicy.RUNTIME,則反射API增強了這種繼承性。如果我們使用java.lang.reflect去查詢一個@Inherited annotation類型的annotation時,反射代碼檢查将展開工作:檢查class和其父類,直到發現指定的annotation類型被發現,或者到達類繼承結構的頂層。

  一個小例子

注解解析代碼

輸出:

  reed1991

 java學科

 net學科

如果 String value() default "reed1991 "  預設值寫成reed1991

那麼@Name(" ")裡面可以為空

繼續閱讀