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 允許子類繼承父類中的註解