Java從JDK 5開始引入注解(annotation)。
注解使得Java源代碼中不但可以包含功能性的實現代碼,還可以添加元數據。
注解的功能類似於代碼中的注釋,所不同的是注解不是提供代碼功能的說明,而是實現程序功能的重要組成部分。
Java注解已經在很多框架中得到了廣泛的使用,用來簡化程序中的配置。
下面先來看看java中常用的注解。
一、常用注解
① @Override注解
package java.lang; import java.lang.annotation.*; @Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @interface Override { }
@Override注解表示子類要重寫父類的對應方法。
如果方法利用此注釋類型進行注解但沒有重寫超類方法,則編譯器會生成一條錯誤消息。
順便說一句:@override注解在JDK 5環境下只能用於對繼承的類的方法的重寫,實現接口中的方法不能用@override注解。但是JDK1.6可以。
② @Deprecated注解
package java.lang; import java.lang.annotation.*; @Documented @Retention(RetentionPolicy.RUNTIME) public @interface Deprecated { }
@Deprecated注解表示方法是不被建議使用的。
③ @SuppressWarnings注解
package java.lang; import java.lang.annotation.*; import java.lang.annotation.ElementType; import static java.lang.annotation.ElementType.*; @Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE}) @Retention(RetentionPolicy.SOURCE) public @interface SuppressWarnings { String[] value(); }
@SuppressWarnings注解表示抑制警告。
例如下面的代碼,聲明了2個未使用的變量,加上2個@SuppressWarnings來抑制警告。
@SuppressWarnings("unused") int a=10; @SuppressWarnings({ "rawtypes", "unused" }) List list =new ArrayList();
上面給出了Java自帶的幾個常用的注解,下面先來了解下代碼中出現的諸如@Target,@Retention,@Documented(這些也叫元注解)的意義。
二、元注解
① @Target
@Target 表示該注解用於什么地方,可取的值包括:
- ElemenetType.CONSTRUCTOR 構造器聲明
- ElemenetType.FIELD 域聲明(包括 enum 實例)
- ElemenetType.LOCAL_VARIABLE 局部變量聲明
- ElemenetType.METHOD 方法聲明
- ElemenetType.PACKAGE 包聲明
- ElemenetType.PARAMETER 參數聲明
- ElemenetType.TYPE 類,接口(包括注解類型)或enum聲明
- ElementType.ANNOTATION_TYPE 注解
② @Retention
@Retention 表示在什么級別保存該注解信息。可選的 RetentionPolicy 參數包括:
- RetentionPolicy.SOURCE 注解將被編譯器丟棄
- RetentionPolicy.CLASS 注解在class文件中可用,但會被VM丟棄
- RetentionPolicy.RUNTIME JVM將在運行期也保留注釋,因此可以通過反射機制讀取注解的信息。
③ @Documented
@Documented 將此注解包含在 javadoc 中
④ @Inherited
@Inherited 允許子類繼承父類中的注解