Java註解經過@interface
關鍵字定義java
public @interface MyAnnotation { }
那麼註解究竟是個什麼東西呢?在平常生活中,每每會給關係要好的朋友起一個暱稱或者綽號,好比說雷軍,網絡上尊稱雷布斯,能夠理解爲雷布斯就是雷軍的一個標籤,而且雷布斯這個標籤有特定的含義。那麼註解在咱們的java代碼中就起到了一個標籤的做用。數組
註解的屬性也叫作成員變量。註解有且只有成員變量。註解的成員變量在註解的定義中以「無形參的方法」形式來聲明,其方法名定義了該成員變量的名字,其返回值定義了該成員變量的類型。可是在註解中定義屬性時它的類型必須是 Java 基本數據類型、類、接口、註解及它們的數組。網絡
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { int id(); String info(); }
在使用註解時能夠重複爲註解屬性賦新值,以下:code
@MyAnnotation(id = 1,info = "hello annotation") public class AnnoDemo { }
註解屬性能夠有本身的默認值,使用default
關鍵字聲明;繼承
@Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface MyAnnotation { int id() default 0; String info() default ""; }
另外若是註解在聲明時使用了value做爲屬性名稱,應用這個註解時能夠直接將屬性值填寫到括號內。接口
@Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface Rename { String value(); }
上面帶有value屬性的註解能夠這樣使用:生命週期
@MyAnnotation(id = 1,info = "hello annotation") public class AnnoDemo { @Rename("hello") private String name; }
在介紹註解屬性的時候,咱們已經開始使用了部分註解,好比@Target
、@Retention
,這些東西是什麼呢?咱們稱之爲元註解。get
元註解是一種特殊的註解,它可以應用到其它的普通註解上面,目的就是給其餘普通的註解進行解釋說明。源碼
@Retention:當一個普通註解被@Retention
註解標識時,它限定了這個普通註解的生命週期。it
RetentionPolicy.SOURCE
: Java源碼期起做用,編譯期被丟棄;RetentionPolicy.CLASS
: 只在編譯期起做用,單不會被加載到JVM中;RetentionPolicy.RUNTIME
: 它會被加載進入到JVM中,在Java程序運行的生命週期中都起做用;@Target:當一個普通註解被@Target
註解標識時,這個普通註解就被限定了在那些地方起做用。好比被限定只在java的類上起做用、或者方法上起做用。
ElementType.TYPE
: 對註解、類、接口、枚舉進行註解;ElementType.FIELD
: 對屬性進行註解;ElementType.METHOD
: 對方法進行註解;ElementType.PARAMETER
: 對形參進行註解;ElementType.CONSTRUCTOR
: 對構造器進行註解;ElementType.LOCAL_VARIABLE
: 對局部變量進行註解;ElementType.ANNOTATION_TYPE
: 對註解進行註解;ElementType.PACKAGE
: 對一個包進行註解;ElementType.TYPE_PARAMETER
: 對引用類型參數註解(JDK1.8新增);ElementType.TYPE_USE
: 對類型進行註解(JDK1.8新增);@Inherited
修飾過的註解進行註解的話,那麼若是它的子類沒有被任何註解應用的話,那麼這個子類就繼承了父類的註解。@Repeatable
修飾的註解能夠重複使用。