Meta Annotation: 元註解的做用就是負責註解其餘註解元註解有四種,以下:1. @Target @Target說明了Annotation所修飾的對象範圍,用於描述註解的使用範圍,即被描述的註解能夠用在什麼地方 Annotation可被用於 packages、types(類、接口、枚舉、Annotation類型)、類型成員(方法、構造方法、成員變量、枚舉值)、方法參數和本地變量(如循環變量、catch參數)。 在Annotation類型的聲明中使用了@Target可更加明晰其修飾的目標 @Target取值(ElementType): CONSTRUCTOR:用於描述構造器 FIELD:用於描述域 LOCAL_VARIABLE:用於描述局部變量 METHOD:用於描述方法 PACKAGE:用於描述包 PARAMETER:用於描述參數 TYPE:用於描述類、接口(包括註解類型) 或enum聲明2. @Retention @Retention定義了該Annotation的生命週期 某些Annotation僅出如今源代碼中,而被編譯器丟棄;而另外一些卻被編譯在class文件中;編譯在class文件中的Annotation可能會被虛擬機忽略,而另外一些在class被裝載時將被讀取(請注意並不影響class的執行,由於Annotation與class在使用上是被分離的) @Retention取值來自java.lang.annotation.RetentionPolicy的枚舉類型值: SOURCE:在源文件中有效(即源文件保留) CLASS:在class文件中有效(即class保留) RUNTIME:在運行時有效(即運行時保留)3. @Documented @Documented用於描述其它類型的annotation應該被做爲被標註的程序成員的公共API,所以能夠被例如javadoc此類的工具文檔化。@Documented是一個標記註解,沒有成員。4. @Inherited @Inherited 是一個標記註解。若是一個使用了@Inherited修飾的annotation類型被用於一個class,則這個Annotation將被用於該class的子類。自定義Annotation:Java內置Annotation:1. @Override @Override 是一個標記型Annotation,說明了被標註的方法覆蓋了父類的方法,起到了斷言的做用2. @Deprecated @Deprecated 標記型Annotation,說明被修改的元素已被廢棄並不推薦使用,編譯器會在該元素上加一條橫線以做提示3. @SuppressWarnnings @SuppressWarnnings 用於通知Java編譯器關閉對特定類、方法、成員變量、變量初始化的警告。 常見的警告名爲下。 unchecked 執行了未檢查的轉換時的警告。例如當使用集合時沒有用泛型來指定集合的類型 finally finally子句不能正常完成時的警告 fallthrough 當switch程序塊直接通往下一種狀況而沒有break時的警告 deprecation 使用了棄用的類或者方法時的警告 seriel 在可序列化的類上缺乏serialVersionUID時的警告 path 在類路徑、源文件路徑等中有不存在的路徑時的警告 all 對以上全部狀況的警告Annotation與Interface的異同: Annotation類型使用關鍵字@interface而非interface。注意開頭的@符號 Annotataion的方法定義是受限制的。其方法必須聲明爲無參數、無異常拋出的。這些方法同時也定義了Annotation的成員——方法名即爲成員名,而方法返回類型即爲成員類型。方法返回類型必須爲Java基礎類型、Class類型、枚舉類型、Annotation類型或者相應的一維數組。方法後面能夠使用default關鍵字和一個默認數值來聲明成員的默認值,null不能做爲成員默認值。成員通常不能是泛型,只有當其類型是Class時能夠使用泛型,由於此方法可以用類型轉換將各類類型轉換爲Class Annotation和interface均可以定義常量、靜態成員類型,也均可以被實現或者繼承