1、java SE5內置了三種內建注解
@Override,表示當前的方法定義將覆蓋超類中的方法。@DePRecated,使用了注解為它的元素編譯器將發出警告,因為注解@Deprecated是不贊成使用的代碼,被棄用的代碼。@SuppressWarnings,關閉不當編譯器警告信息。2、Java還提供了4種元注解
元注解 | 解釋 |
---|---|
@Target | 表示該注解可以用于什么地方,可能的ElementType參數有:CONSTRUCTOR:構造器的聲明FIELD:域聲明(包括enum實例)LOCAL_VARIABLE:局部變量聲明METHOD:方法聲明PACKAGE:包聲明PARAMETER:參數聲明TYPE:類、接口(包括注解類型)或enum聲明 |
@Retention | 表示需要在什么級別保存該注解信息??蛇x的RetentionPolicy參數包括:SOURCE:注解將被編譯器丟棄CLASS:注解在class文件中可用,但會被VM丟棄RUNTIME:VM將在運行期間保留注解,因此可以通過反射機制讀取注解的信息。 |
@Document | 將注解包含在Javadoc中 |
@Inherited | 允許子類繼承父類中的注解 |
注解分為兩類,一類是元注解,另外一類是普通注解。 所謂元注解就是修飾注解的注解。 拿到一個注解,如何知道它是否是元注解呢?需要看它的元注解(無論是元注解還是普通注解都是有元注解的),如果看到這樣的元注解:@Target(ElementType.ANNOTATION_TYPE),那么此時這個注解一定是元注解。
(1)以@interface關鍵字定義 (2)注解包含成員,成員以無參數的方法的形式被聲明。其方法名和返回值定義了該成員的名字和類型。 (3)成員賦值是通過@Annotation(name=value)的形式。 (4)注解需要標明注解的生命周期,注解的修飾目標等信息,這些信息是通過元注解實現。
例如:
@Retention(value = RetentionPolicy.RUNTIME)@Target(value = { ElementType.ANNOTATION_TYPE } )public @interface Target{ ElementType[] value();}源碼分析如下: 第一:元注解@Retention,成員value的值為RetentionPolicy.RUNTIME。 第二:元注解@Target,成員value是個數組,用{}形式賦值,值為ElementType.ANNOTATION_TYPE 第三:成員名稱為value,類型為ElementType[] 另外,需要注意一下,如果成員名稱是value,在賦值過程中可以簡寫。如果成員類型為數組,但是只賦值一個元素,則也可以簡寫。如上面的簡寫形式為: @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE)
新聞熱點
疑難解答