了解java注解

时间:2021-07-17 15:18:49

类似于下面这样的就是注解

了解java注解

注解可以在类上,成员变量上,方法上等

假如有2个注解是这样的:(其中的Author和Date)

了解java注解

那么这2个注解的定义就是这样的:

Author注解:

了解java注解

Date注解:

了解java注解

可以看到注解的定义和接口的定义比较类似,而Author注解中有name属性,所以使用Author的时候比较要填写name属性值

如果想要注解有默认值,可以这样:

了解java注解

这样使用Author注解时age属性值就可以不用填写,一个注解有多个属性值时使用时用逗号隔开

如果注解中只定义了1个属性且名称为value,那么使用时名称可省略,像这样:

了解java注解

了解java注解

注解也是一种类型,既然可以定义,那么也是可以获取的,像这样:

了解java注解

运行你会发现是会报错的,难道是代码错了,其实并不是,是注解的保留策略没有更改

再就要谈到元注解了,元注解就是注解类型上的注解,先看一下注解@Override的元注解

了解java注解

其中@Target和@Retention就是元注解,其中@Target表示注解的应用范围,@Retention表示注解的保留策略

这两个注解可以根据java.lang.annotation接口去查阅

java.lang.annotation.RetentionPolicy

了解java注解

所以只需要将@Retention的值设置为RUNTIME就可以读取注解了,它的默认值是CLASS

java.lang.annotation.ElementType

了解java注解

@Target的默认值应该是这所有的(这个我没有尝试啊)

看到这里就应该知道怎么解决刚才报错的问题了

只需要在自定义注解上加上元注解@Retention就行了,当然,也可以设置一下注解@Target,就像这样:

  Author注解:

了解java注解

  Date注解:

了解java注解

再运行就可以得到结果了

还有刚才提到的关于注解的继承,也是使用元注解:@Inherited

注解默认不继承,不过这继承也是有限制的

@Inherited   //表示注解是否能继承, 只能作用在类上, 只对类的继承有效, 对实现接口无效

注解可能用到的地方不多,不过了解注解可以让我们更理解一些东西。比较springmvc中的注解等