自定义注解

注解的格式

我们从常见的@Override来看一下注解的格式
在这里插入图片描述
通过观察我们发现注解的内部格式是由两部分组成的

  • 元注解(就是上面代码中的前2行)
  • public @interface 注解名{属性列表}

注解的本质

通过查看@Override我们已经知道了注解组成。你是否会对public @interface Override {
}感到奇怪呢,这玩意儿看着既陌生又熟悉。
为什么既陌生又熟悉呢?我们如果把@去掉这就是一个名称为Override的一个接口了。可是这样@在这里放着,它还是接口吗?
我们对其反编译一下来看看它究竟是什么

建立一个.java文件,输入以下内容
在这里插入图片描述
使用javac命令进行编译
在这里插入图片描述
使用javap命令来反编译
在这里插入图片描述反编译后的结果
public interface Override extends java.lang.annotation.Annotation {
}

从反编译后的结果我们可以看到**注解本质上就是一个接口,该接口默认继承Annotation接口**

注解中定义的属性

上面我们可以看到注解的本质就是一个接口,那么注解中的属性其实就是接口中定义的抽象方法。

属性的返回值类型有下列取值:

  • 基本数据类型
  • String
  • 枚举
  • 注解
  • 以上类型的数组

定义了属性,在使用时需要给属性赋值:

  • 如果定义属性时,使用default关键字给属性默认初始化值,则使用注解时,可以不进行属性的赋值。
  • 如果只有一个属性需要赋值,并且属性的名称是value,则value可以省略,直接定义值即可。
  • 数组赋值时,值使用{}包裹。如果数组中只有一个值,则{}可以省略

元注解

用于描述注解的注解
需要掌握的四个注解:

  • @Target:描述注解能够作用的位置
          ElementType取值:
                  * TYPE:可以作用于类上
                  * METHOD:可以作用于方法上
                  * FIELD:可以作用于成员变量上
  • @Retention:描述注解被保留的阶段
                  @Retention(RetentionPolicy.RUNTIME):当前被描述的注解,会保留到class字节码文件中,并被JVM读取到
  • @Documented:描述注解是否被抽取到api文档中
  • @Inherited:描述注解是否被子类继承
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值