218 - 元注解

元注解是用于修饰其它注解的注解。 

举例:

 JDK5.0提供了四种元注解Retention, Target, Documented, Inherited

1、Retention

@Retention:用于修饰注解,用于指定修饰的那个注解的生命周期,@Rentention包含一个RetentionPolicy枚举类型的成员变量,使用@Rentention时必须为该value成员变量指定值:(3种)

1)RetentionPolicy.SOURCE:

        在源文件中有效(即源文件保留),编译器直接丢弃这种策略的注释,在.class文件中不会保留注解信息

代码示例:

 

 反编译查看字节码文件:发现字节码文件中没有 MyAnnotation 这个注解: 

 2)RetentionPolicy.CLASS:

        在.class文件中有效(即class保留),保留在.class文件中,但是当运行Java程序时,他就不会继续加载了,不会保留在内存中,JVM不会保留注解。如果注解没有加Retention元注解,那么相当于默认的注解就是这种状态。 

代码示例:

 反编译看字节码文件,字节码文件中带有MyAnnotation注解: 

 

 3)RetentionPolicy.RUNTIME:

        在运行时有效(即运行时保留),当运行 Java程序时,JVM会保留注释,加载在内存中了,那么程序可以通过反射获取该注释。

        这里,不做示例。

2、Target

        用于修饰注解的注解,用于指定被修饰的注解能用于修饰哪些程序元素(类、属性、方法....)

        @Target也包含一个名为value的成员变量(包含一些枚举类似)。

代码示例:

注解:

@Target({TYPE, METHOD,FIELD,CONSTRUCTOR})  //添加FIELD时会报错?
public @interface MyAnnotation4 {
}

测试:

@MyAnnotation4
public class Student {
    @MyAnnotation4
    int age;
    @MyAnnotation4
    public Student(){
    }
    @MyAnnotation4
    public void eat(){
    }
}

3、Documented(很少)

        用于指定被该元注解修饰的注解类将被javadoc工具提取成文档。默认情况下,javadoc是不包括注解的,但是加上了这个注解生成的文档中就会带着注解了

代码示例:

如果:Documented注解修饰了Deprecated注解,

那么Deprecated注解就会在javadoc提取的时候,提取到API中:

4、Inherited(极少)

被它修饰的Annotation将具有继承性。如果某个类使用了被

@Inherited修饰的Annotation,则其子类将自动具有该注解。

代码示例:

        如果MyAnno注解使用了@Inherited元注解之后,就具备了继承性,那么相当于子类Student也使用了这个MyAnno

 父类:

子类:(并不是直接能看到)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值