---------------------- android培訓、java培訓、期待與您交流! ----------------------
今天學習了Annotation註解,就把自己的理解寫下來,大家一起學習。
首先是java的四個元註解,所謂的元註解就是註解的註解,也就是用來註解註解的(有點亂),他們分別是
1.@Target,表示註解用於什麼地方,有八個參數,分別是:
ElementType.ANNOTATION_TYPE(注釋型別宣告)
ElementType.CONSTRUCTOR(構造方法聲明)
ElementType.FIELD(欄位聲明)
ElementType.LOCAL_VARIABLE(局部變數聲明)
ElementType.METHOD(方法聲明)
ElementType.PACKAGE(包聲明)
ElementType.PARAMETER(參數聲明)
ElementType.TYPE(類,介面或枚舉聲明)
2.@Retension,表示該註解資訊儲存在那裡,有三個參數,分別是:
RetentionPolicy.CLASS(註解資訊記錄在類中,運行是被丟棄,是預設的)
RetentionPolicy.RUNTIME(註解資訊記錄在運行期,也就是運行是保留下來)
RetentionPolicy.SOURCE(註解資訊記錄在源檔案,編譯成類檔案就會被丟棄)
3. @Documented 將此註解包含在 javadoc 中
4. @Inherited 允許子類繼承父類中的註解
Java中有三個預設的註解也要提一下,分別是
1.@Override,用來告訴編譯器下面這個方法是重寫父類的方法
2.@ Deprecated,用來告訴編譯器這是一個過時的API,讓編譯器發出警告
3.@SuppressWarnings,用來告訴編譯器不用管警告的資訊,關閉警告資訊
下面,我們來編寫自訂的註解:
import java.lang.annotation.*;@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface A{ String ID(); String Color() default "yellow";//這個使用了預設值,在不設定的情況下時使用預設的。}
再編寫一個類使用註解
public class B {@A(ID="110")//這個註解必須是方法,因為上面元註解是@Target(ElementType.METHOD)public void a(){}@A(ID="120",Color="red")//並且在運行期間都存在public void b(){}}
上面就是自訂註解的使用,下面示範通過反射解析註解
public class C {public static void main(String[] args) {B b = new B();Method[] ms = b.getClass().getDeclaredMethods();for(Method m:ms){if(m.isAnnotationPresent(A.class)){A a = m.getAnnotation(A.class);System.out.println(m.getName()+":"+a.ID()+":"+a.Color());}}}}
結果是
a:110:yellow
b:120:red
現在對註解有了初步的瞭解,那麼,為什麼要使用註解呢,引用下面的例子
public class D extends B{//@Overridepublic void A(){System.out.println("hello");}}
上面的例子本來我是想重寫a()函數的,但是不小心寫成了大寫A(),如果有@Override,編譯器將產生錯誤,如果注釋掉,那麼編譯器將以為我是在寫一個新的函數,所以不報錯,結論:註解簡單來說就是注釋給機器看的,讓機器來告訴我們無意間的錯誤。
---------------------- android培訓、java培訓、期待與您交流! ----------------------
詳細請查看:edu.csdn.net/heima