描述
-
Annotation定義:注解是Java語言從JDK 5.0版本開始引入的一種技術。
-
Annotation作用:
-
注解不是程序本身,但可以對程序作出解釋。這與注釋(comment)類似,但注解可以被其他程序(如編譯器)讀取。
-
-
Annotation格式:注解在代碼中以"@注釋名"的形式存在,可以添加一些參數值,例如:
@SuppressWarnings(value="unchecked")
。 -
Annotation使用位置:注解可以附加在包(package)、類(class)、方法(method)、字段(field)等上面,相當于給它們添加了額外的輔助信息。
-
Annotation訪問方式:可以通過Java的反射機制編程實現對這些元數據的訪問。
內置注解
-
一些常常看見的
注解名稱 | 定義位置 | 用途描述 | 參數示例 |
---|---|---|---|
@Override | java.lang.Override | 適用于修飾方法,表示該方法聲明打算重寫超類中的另一個方法聲明 | 無需參數 |
@Deprecated | java.lang.Deprecated | 用于修飾方法、屬性、類,表示不鼓勵程序員使用,通常因為存在危險或更好的選擇 | 無需參數 |
@SuppressWarnings | java.lang.SuppressWarnings | 用來抑制編譯時的警告信息,需要添加參數使用 | @SuppressWarnings("all") @SuppressWarnings("unchecked") @SuppressWarnings(value={"unchecked", "deprecation"}) |
自定義注解
實例
//這個兩個是元注解
?
@Target(ElementType.METHOD)
/*這個是 方法注解 (簡單說這個注解用在方法上)*/
@Retention(RetentionPolicy.RUNTIME)
/*注解在源代碼、類文件以及運行時都保留。。
*表示我們的注解在什么時候還可以生效
*(RetentionPolicy.RUNTIME > RetentionPolicy.CLASS > RetentionPolicy.SOURCE)
*/
public @interface test {String[] value() default {};Mode RequsetMode() default Mode.FORM; ?Mode returnType() default Mode.FORM; ?boolean isMyServlet() default false;
}
-
自定義注解的定義:
-
使用
@interface
關鍵字來聲明自定義注解,它自動繼承自java.lang.annotation.Annotation
接口。
-
-
注解的聲明格式:
-
格式為:
public @interface 注解名 {定義內容}
。
-
-
注解方法:
-
注解中的每一個方法實際上是聲明了一個配置參數。
-
方法的名稱代表參數的名稱。
-
-
參數類型:
-
返回值類型定義了參數的類型,只能是基本類型、
Class
、String
、enum
等。
-
-
默認值:
-
可以使用
default
關鍵字來聲明參數的默認值。
-
-
參數成員:
-
如果注解只有一個參數成員,通常參數名為
value
。
-
-
注解元素的值:
-
注解元素在使用時必須有值,定義注解元素時,常用空字符串、0或其他默認值作為參數的默認值。
-
元注解
-
@Target
-
作用:指定注解可以應用于哪些Java元素,如類、方法、構造函數、字段、參數、局部變量等。
-
參數:
@target(ElementType)
枚舉,可能的值包括:
-
ANNOTATION_TYPE
:注解 -
CONSTRUCTOR
:構造函數注解 -
FIELD
:字段注解 -
LOCAL_VARIABLE
:局部變量注解 -
METHOD
:方法注解 -
PACKAGE
:包注解 -
PARAMETER
:參數注解 -
TYPE
:類、接口(包括注解類型)
-
-
定義位置:java.lang.annotation.Target
-
-
@Retention
-
作用:定義注解的保留策略,即注解信息在何種階段可用。
-
參數:
@Retention(RetentionPolicy)
枚舉,可能的值包括:
-
SOURCE
:注解僅在源代碼中保留,在編譯時丟棄。 -
CLASS
:注解在源代碼和類文件中保留,但在運行時不可用。 -
RUNTIME
:注解在源代碼、類文件以及運行時都保留。
-
-
定義位置:java.lang.annotation.Retention
-
-
@Documented
-
作用:指示注解應該被包含在用戶文檔中。
-
參數:無
-
定義位置:java.lang.annotation.Documented
-
-
@Inherited
-
作用:指示一個注解可以被子類繼承。
-
參數:無
-
定義位置:java.lang.annotation.Inherited
-