JAVA中的註解java
四種元註解:jvm
元註解:註解的註解,即java爲註解開發特准備的註解。函數
①: @Target : 表示該註解用於什麼地方工具
@Target:註解的做用目標spa
@Target(ElementType.TYPE) //接口、類、枚舉、註解.net
@Target(ElementType.FIELD) //字段、枚舉的常量繼承
@Target(ElementType.METHOD) //方法接口
@Target(ElementType.PARAMETER) //方法參數開發
@Target(ElementType.CONSTRUCTOR) //構造函數文檔
@Target(ElementType.LOCAL_VARIABLE)//局部變量
@Target(ElementType.ANNOTATION_TYPE)//註解
@Target(ElementType.PACKAGE) ///包
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
ElementType[] value();
}
public enum ElementType {
/** 類,接口(包括註解類型)或enum聲明 */
TYPE,
/** 域聲明(包括 enum 實例) */
FIELD,
/** 方法聲明 */
METHOD,
/** 參數聲明 */
PARAMETER,
/** 構造器聲明 */
CONSTRUCTOR,
/** 局部變量聲明 */
LOCAL_VARIABLE,
/** Annotation type declaration */
ANNOTATION_TYPE,
/** 包聲明 */
PACKAGE,
/**
* 類型參數聲明
* @since 1.8
*/
TYPE_PARAMETER,
/**
* 類型的使用
* @since 1.8
*/
TYPE_USE
}
②.@Retention:: 表示該註解能夠保存的範圍
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
RetentionPolicy value();
}
public enum RetentionPolicy {
/**
* 源代碼:即此註解只能保存在源代碼中
* 當編譯時,會被丟棄
*/
SOURCE,
/**
* class文件:即此註解能夠在class文件中保留
* 但會被jvm丟棄
*/
CLASS,
/**
* 運行期:即此註解能夠在運行時保留
* 能夠經過反、反射得到
*/
RUNTIME
}
註解@Retention能夠用來修飾註解,是註解的註解,稱爲元註解。
Retention註解有一個屬性value,是RetentionPolicy類型的,Enum RetentionPolicy是一個枚舉類型,
這個枚舉決定了Retention註解應該如何去保持,也可理解爲Rentention 搭配 RententionPolicy使用。RetentionPolicy有3個值:CLASS RUNTIME SOURCE
用@Retention(RetentionPolicy.CLASS)修飾的註解,表示註解的信息被保留在class文件(字節碼文件)中當程序編譯時,但不會被虛擬機讀取在運行的時候;
用@Retention(RetentionPolicy.SOURCE )修飾的註解,表示註解的信息會被編譯器拋棄,不會留在class文件中,註解的信息只會留在源文件中;
用@Retention(RetentionPolicy.RUNTIME )修飾的註解,表示註解的信息被保留在class文件(字節碼文件)中當程序編譯時,會被虛擬機保留在運行時,
因此他們能夠用反射的方式讀取。RetentionPolicy.RUNTIME 能夠讓你從JVM中讀取Annotation註解的信息,以便在分析程序的時候使用.
③ @Documented :: 即擁有這個註解的元素能夠被javadoc此類的工具文檔化。它表明着此註解會被javadoc工具提取成文檔。在doc文檔中的內容會由於此註解的信息內容不一樣而不一樣。至關與@return,@param 等。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {
}
④ @Inherited : 容許子類繼承父類中的註解。即擁有此註解的元素其子類能夠繼承父類的註解。
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Inherited {
}
@Interface
@interface 不是interface,是註解類
是jdk1.5以後加入的,java沒有給它新的關鍵字,因此就用@interface 這麼個東西表示了
這個註解類,就是定義一個可用的註解