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阶段。


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