Java 的註解是用來描述JAVA 源代碼的。
J2SE50.的java.lang包中預定義了三個註解:override,deprecated,suppressWarnings.
1. Override註釋:僅用於方法,指明註釋的方法將覆蓋父類中的方法。
2. Deprecated註釋:對不應該再使用的方法進行註釋,與被聲明過時的方法放在同一行。使用被Deprecated註釋的方法,編譯器會提示過時警告。
3. SuppressWarnings註釋:單一註釋,可以通過數組提供變量,變量值指明要忽略的特定類型的警告。@SuppressWarnings(value = {'unchecked','fallthrough'})
自定義Annotation:@interface
在講解自定義Annotation前,首先看一下對註解的註解
Target---這個註解理解起來很簡單,即指定註解目標,eg:
@Target(ElementType.METHOD)
@interface MyAnnotation{}
@MyAnnotation// 錯誤的使用
publicclass Class1
{
@MyAnnotation// 正確的使用
publicvoid myMethod1(){}
}
Target使用一個枚舉類型屬性,它的值是ElementType.METHOD,表明這個Annotation只能爲方法註解。而不能爲其它的任何語言元素進行註解。
public enum ElementType {
TYPE, // 指定適用點爲 class, interface, enum
FIELD, // 指定適用點爲 field
METHOD, // 指定適用點爲 method
PARAMETER, // 指定適用點爲 method 的 parameter
CONSTRUCTOR, // 指定適用點爲 constructor
LOCAL_VARIABLE, // 指定使用點爲 局部變量
ANNOTATION_TYPE, //指定適用點爲 annotation 類型
PACKAGE // 指定適用點爲 package
}
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
RetentionPolicy value();
}
類中有個RetentionPolicy類,也是一個枚舉類,具體看代碼:
public enum RetentionPolicy {
SOURCE, // 編譯器處理完Annotation後不存儲在class中
CLASS, // 編譯器把Annotation存儲在class中,這是默認值
RUNTIME // 編譯器把Annotation存儲在class中,可以由虛擬機讀取,反射需要
}
@Documented:是一個標記註釋,表示註釋應該出現在類的javadoc中,因爲在默認情況下注釋時不包括在javadoc中的。
下面開始講解如何使用自定義註解:
定義註解:
@Retention(RetentionPolicy.RUNTIME)
@interface MyAno
{
String name();
int age();
}
在Father類中註解
@MyAno(name = "tomi",age = 23)
public class Father
{
String str;
public void say()
{
Father f = new Father();
Annotation[] anos = f.getClass().getAnnotations();//取得所有註解
for(Annotation anot : anos)
{
System.out.println(anot.toString());
if(anot instanceof MyAno)
{
System.out.println(((MyAno)anot).name());
}
}
}
}
註解的用途:讀取配置,以及設置屬性值。