JDK1.5新特性-註解

1.關於元註解@Retention()

在註解上又加的註解就是元註解。@Retention()括號中的取值RetentionPolicy是一個枚舉,有三個取值:RetentionPolicy.SURECE,RetentionPolicy.CLASS,RetentionPolicy.RUNTIME,分別對應java源文件,class文件,內存中字節碼文件。其默認值是class階段的RetentionPolicy.CLASS。

自定義一個註解,如果沒有 加原註解,它默認爲@Retention(RetentionPolicy.CLASS),如下示例:

註解類:ItCastAnnotation.java

public @interface ItCastAnnotation {

}
調用註解類的類:AnnotationTest.java
@ItCastAnnotation
public class AnnotationTest {
    public static void main(String[] args) {
        if(AnnotationTest.class.isAnnotationPresent(ItCastAnnotation.class))
        {
            ItCastAnnotation annotation=(ItCastAnnotation)AnnotationTest.class.getAnnotation(ItCastAnnotation);
            System.out.println(annotation);
        }
    }

}

結果運行沒有輸出,因爲註解類AnnotationTest.java的默認存在階段是RetentionPolicy.CLASS階段,調用了它的函數會運行到內存字節碼階段,到內存字節碼階段執行 System.out.println(annotation);時annotation已經不存在,所以錯。

JDK中定義的三個註解類型:DeprecatedOverride,SuppressWarnings@Retention(value=“”)分別爲:RUNTIME,SOURCE,SOURCE。如圖:

因爲Override,SuppressWarnings只是給編譯器用,所以在源代碼階段存在就行。而Deprecated雖然也是給編譯器看,但它要用的內存中的字節碼,所以要一直運行到RUNTIME階段。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章