创建注解001

在这里插入图片描述
创建注解和创建接口有点类似,都用了interface 不过注解的interface前面多了一个@,另外它还有连个元注解,@Target和@Retention,这两个注解专门用于定义注解本身。@Target表示注解的目标,ElementType.METHOD表示的是一个枚举 可选的值有:

public enum ElementType {
    TYPE,  表示类或者接口  或者枚举声明
    FIELD,   字段 包括枚举常量
    METHOD,  方法
    PARAMETER, 方法中的参数
    CONSTRUCTOR, 构造方法
    LOCAL_VARIABLE,  本地变量
    ANNOTATION_TYPE,  
    PACKAGE,
    TYPE_PARAMETER,
    TYPE_USE
}

目标可以有很多个,用{}表示

@Target({ElementType.TYPE,ElementType.LOCAL_VARIABLE,ElementType.METHOD})

@Retention表示注解信息保留到什么时候,取值只能有一个。类型是RetentionPolice,它是一个枚举,有三个取值:

public enum RetentionPolicy {
    SOURCE,   //只在源代码中保留,编译器将代码翻译成字节码以后,文件就回丢掉
    CLASS,  //保留到字节码文件中,但java虚拟机将class文件加载到内存时不一定会在内存中保留
    RUNTIME  //一直保留到运行时
}

**如果retention没有声明的话,默认是class
在这里插入图片描述
如果是给编译器使用,所以@Retention都是Retention.Source

@Documented表示注解信息包含到生成的文档中
注解是不能被继承的,不过注解有一个和继承有关的注解@Inherited

public class Demo001 {
    @Inherited
    @Retention(RetentionPolicy.RUNTIME)
    static @interface Test{
    }
    @Test
    static class  BaseClass{

    }
    static class  children  extends BaseClass{

    }
    public static void main(String[] args) {
        System.out.println(children.class.isAnnotationPresent(Test.class));
    }
}

打印结果:

true

如果去掉注解@Inherited,打印结果:

false

Test是一个注解,BaseClass有这个注解,children继承了baseClass,main方法是检测children是否有test注解。输出为true表示有,false表示没有

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值