定義一個簡單的注解: public @interface MyAnnotation{}
把它加在某個類上:@MyAnnotation public class MyAnnotationTest{}
用反射進行測試AnnotationTest 的定義上是否有@MyAnnotation
根據反射測試的問題,引入@Rentention元注解的講解,其三種取值:
RententionPolicy.SOURCE、RententionPolicy.CLASS、RententionPolicy.RUNTIME; 分别對應java源代碼—>class檔案—>記憶體中的位元組碼
思考: @Override、@SuppressWamings和@Deprecated這三個注解的屬性值分别是什麼?
@Override ,用于給編譯器看,是否符合重寫規範(方法名,參數清單,傳回值必須相同)。一般是自己寫的代碼.------SOURCE階段 @SuppressWarnings 用于告訴編譯器,不要在編譯階段發出警告。一般是自己寫的代碼.---SOURCE階段 @Deprecated 用于标注方法是否過時。一定是在調入記憶體後,運作期掃描二進制。有可能是别人寫的我在調用。---RUNTIME階段
示範和講解@Target元注解
Target的預設值為任何元素,設定Target等于ElementType.METHOD,原來加在類上的注解就報錯了,改為用數組方式設定{ElementType.METHOD,ElementType.TYPE}就可以了。
元注解以及其枚舉屬性值不用記,隻要會看jdk提供的幾個基本注解的API幫助文檔的定義或其源代碼,按圖索骥即可查到,或者直接看java.lang.annotation包下的類。
開始做,堅持做,重複做